Это работает 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 для вас, поэтому вызов вручную вручную добавляет данные в результат.
Вы уверены, что ваш ответ JSONP не включает в себя 'myFunctionName' на выходе дважды? –
Что вызывает запрос AJAX? Этот третий пример работает как простой тест –
@Spencer: вот и все. Отправьте это как ответ. По-видимому, в ASP.NET MVC 3 ActionResult вызывает ExecuteResult для вас. –