2011-01-26 8 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用: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回追加されます。

+2

あなたのJSONPレスポンスは出力に 'myFunctionName'を2回も含んでいませんか? –

+1

AJAXリクエストをトリガしているのは何ですか?その3番目の例は、単純なテストとして動作するようです。 –

+0

@Spencer:それはそれでした。答えとして投稿してください。どうやらASP.NET MVC 3では、ActionResultがあなたのためにExecuteResultを呼び出します。 –

答えて

2

コメントから私の答えは:

は、あなたのJSONP応答が出力二回 にmyFunctionName含む ではありませんか?

+1

エラーが発生した場所を説明するコードを追加しました。 –