これは、作業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用:2番目の要求で、それを関数myFunctionNameを2回呼び出します。サーバーからの結果はmyFunctionName([jsondata])です。ここで[jsondata]はjsonでエンコードされたデータです。
$.ajax({
type: "GET",
url: "GetJSONP",
data: {},
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
jsonpCallback: "myFunctionName"
});
私は二回myFunctionNameを呼び出す第3のコード例では、間違った何をしているのですか?
回答: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'を2回も含んでいませんか? –
AJAXリクエストをトリガしているのは何ですか?その3番目の例は、単純なテストとして動作するようです。 –
@Spencer:それはそれでした。答えとして投稿してください。どうやらASP.NET MVC 3では、ActionResultがあなたのためにExecuteResultを呼び出します。 –