0

私のjQueryajax呼び出しは、未定義のエラーで失敗します。私のjsコードは次のようになります:

$.ajax({
   type: "POST",
   url: "Data/RealTime.ashx",
   data: "{}",
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   timeout: 15000,
   dataFilter: function(data, type) {
       alert("RAW DATA: " + data + ", TYPE: "+ type);
       return data;
   },
   error: function(xhr, textStatus, errorThrown) {
       alert("FAIL: " + xhr + " " + textStatus + " " + errorThrown);
   },
   success: function(data) {
       alert("SUCCESS");
   }
});

私のajaxソースは一般的なASP.NETハンドラーです。

[WebService(Namespace = "http://my.website.com")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class RealTime : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "application/json";
        context.Response.Write("{ data: [1,2,3] }");
        context.Response.End();
    }

    public bool IsReusable
    { get { return false; } }
}

"{ }"ここで、ハンドラーに空のオブジェクト()を返すと、呼び出しは成功します。しかし、他のJSONオブジェクトを返すと、呼び出しは失敗します。

ハンドラーは、dataFilter正しいオブジェクトを受け取っていることを示しています。Firebugは期待どおりの応答を表示し、JSONタブはオブジェクトが正しく解析されたことを示します。

では、何が原因でしょうか?

[編集]実際に「無効なJSONオブジェクトを返すと、呼び出しが失敗する」と書くべきでした!:D

4

1 に答える 1

2

有効なJSONが必要です!:)

この行を変更します。

context.Response.Write("{ data: [1,2,3] }");

これに:

context.Response.Write("{ \"data\": [1,2,3] }");

jQuery 1.4+は、以前のように無効なJSONを許容しません(サイレントに/奇妙な方法で失敗します)。したがって、二重引用符を追加するだけで、すべて設定されます。JSONの有効性をテストするための便利なツールについては、JSONLintをチェックアウトしてください:http ://www.jsonlint.com/

于 2010-06-05T11:19:55.610 に答える