0

jquery $.ajax メソッドから、別のドメインで作成した .net Web サービスにリクエストを送信しようとしています。私は多くのことを試しましたが、それでもうまくいきません。私が得続ける応答は未定義です。

誰でもアドバイスできますか?

ありがとう

.NET コード

public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            string callback = "";
            try
            {
                if (!string.IsNullOrEmpty(context.Request["callback"]))
                {
                    if (!string.IsNullOrEmpty(context.Request["var1"]))
                        SaveData(context.Request["var1"]);
                    callback = context.Request["callback"];


                    var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();                    
                    string sJSON = oSerializer.Serialize(JSON);

                    HttpContext.Current.Response.ContentType = "application/json";
                    string qs = HttpContext.Current.Request.QueryString["callback"];

HttpContext.Current.Response.Write(callback+"(\"Clients : \"" + sJSON+ ")");


                }

            }
            catch (Exception exc)
            {

                context.Response.Write(callback +
            "({ \"return\": \"" + exc.Message + "\" })");
            }
        }

Jクエリ

$.ajax({
                url:        "URL",
                dataType:   "jsonp",
                success:    function(data){
                    alert(data); // Always Undefined


                }
            });
4

1 に答える 1

1

ここで壊れた JSON を返しています。

HttpContext.Current.Response.Write(callback+"(\"Clients : \"" + sJSON+ ")");

\"アフターに気付きますClients:か?の前に配置する必要がありました:。したがって、JSON は次のようになります (FireBug などの JavaScript デバッグ ツールを使用していた場合は、FireBug がこのエラーをコンソールに書き込んだため、すぐに気付くはずです)。

callback("Clients : "[{"ID":1,"Name":"client 1"},{"ID":2,"Name":"client 2"},{"ID":3,"Name":"client 3"}])

問題が見えますか?

JSON をハードコーディングしないでください。JSON を構築するために文字列連結を使用しないでください。決して

JSON を構築または解析するときは、常にJSON シリアライザーを使用します。

そのように:

string sJSON = oSerializer.Serialize(new { Clients = JSON });
context.Response.ContentType = "application/json";
context.Response.Write(string.Format("{0}({1})", callback, sJSON));

この例では、匿名型new { Clients = JSON }を JSON シリアライザーに渡しています。JSON シリアライザーは、正しく有効な出力を生成するようにします。

callback("Clients":[{"ID":1,"Name":"client 1"},{"ID":2,"Name":"client 2"},{"ID":3,"Name":"client 3"}])
于 2013-01-18T12:34:03.323 に答える