2011-01-26 1 views
3

Это работает JSON запрос:

$.ajax({ 
    type: "POST", 
    url: "GetJSON", 
    data: {}, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (j) { 
     myFunctionName(j); 
    } 
}); 

И еще почти идентичный запрос JSONP, который также работает:

$.ajax({ 
    type: "GET", 
    url: "GetJSONP", 
    data: {}, 
    contentType: "application/json; charset=utf-8", 
    dataType: "jsonp", 
    success: function (j) { 
     myFunctionName(j); 
    } 
}); 

Теперь, если вы выгрузить успех: для jsonpCallback: на втором запросе, его дважды вызывает функцию myFunctionName. Результатом работы сервера является myFunctionName ([jsondata]), где [jsondata] является json-кодированными данными.

$.ajax({ 
    type: "GET", 
    url: "GetJSONP", 
    data: {}, 
    contentType: "application/json; charset=utf-8", 
    dataType: "jsonp", 
    jsonpCallback: "myFunctionName" 
}); 

Что я делаю неправильно в третьем примере кода, который вызывает myFunctionName дважды?

Ответ:

В ASP.NET MVC 3, я использовал это:

public class JsonpResult : ActionResult 
{ 
    public override void ExecuteResult(ControllerContext c) 
} 

И это:

public static JsonpResult Jsonp(this Controller c, object d) 
{  
    JsonpResult r = new JsonpResult(); 
    r.Data = d; 
    // r.ExecuteResult(c.ControllerContext); <== mistake 
    return r; 
} 

И это:

public JsonpResult GetJSONP() 
{ 
    var service = new Service(); 
    var data = service.Getdata(); 
    return this.Jsonp(data); 
} 

Ошибка отмечена в комментариях. По-видимому, ASP.NET MVC вызывает ExecuteResult для вас, поэтому вызов вручную вручную добавляет данные в результат.

+2

Вы уверены, что ваш ответ JSONP не включает в себя 'myFunctionName' на выходе дважды? –

+1

Что вызывает запрос AJAX? Этот третий пример работает как простой тест –

+0

@Spencer: вот и все. Отправьте это как ответ. По-видимому, в ASP.NET MVC 3 ActionResult вызывает ExecuteResult для вас. –

ответ

2

Мой ответ от комментариев:

Вы уверены, что ваш ответ JSONP не включая myFunctionName на выходе два раза?

+1

Я добавил код, чтобы объяснить, где произошла ошибка. –