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 + "\" })");
            }
        }

查询

$.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 序列化程序,它将注意产生正确和有效的输出:

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