使用JSONP数据类型的奇怪JQuery$.Ajax()行为:如何修复?

使用JSONP数据类型的奇怪JQuery$.Ajax()行为:如何修复?,json,jquery,asp.net-mvc-3,jsonp,Json,Jquery,Asp.net Mvc 3,Jsonp,这是一个有效的JSON请求: $.ajax({ type: "POST", url: "GetJSON", data: {}, contentType: "application/json; charset=utf-8", dataType: "json", success: function (j) { myFunctionName(j); } }); 还有另一个几乎相同的JSONP请求也可以工作: $.ajax({

这是一个有效的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);
    }
});
现在,如果在第二个请求中调出success:for jsonpCallback:for,它将调用函数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会为您调用ExecuteSult,因此手动调用它会将数据添加到结果中两次。

我的回答来自评论:


您确定您的JSONP响应不正确吗 在输出中包括
myFunctionName
两次


您确定JSONP响应没有在输出中包含两次
myFunctionName
?是什么触发了AJAX请求?第三个例子似乎是一个简单的例子test@Spencer:就是这样。把它贴出来作为答案。显然在ASP.NET MVC 3中,ActionResult会为您调用ExecuteSult。齐姆:啊,提到ASP.NET MVC会很重要,但很高兴我能帮上忙。