1

我需要从跨域获取 json 数据。

$.getJSON('http://xx.xx.xx.xx/SampleService/Handler.ashx?callback=?', data, function (jsonData) {
                alert('1');
            })
            .done(function () { console.log("second success"); })
            .fail(function () { console.log("error"); })
            .always(function () { console.log("complete"); });

处理程序代码:

context.Response.ContentType = "application/json";
                SampleService service = new SampleService();

                List<List<Byte>> response = service.GetData();
                string jsonData = JsonConvert.SerializeObject(response);
                context.Response.Write(string.Format("{0}([{1}]);", context.Request["callback"], jsonData));

我得到的错误是:

"parsererror"
Error: jQuery19108131180874027861_1366004862133 was not called
4

2 回答 2

1

对跨域请求使用 jsonp 调用。使用这样的东西

$.ajax({
        url : "http://xx.xx.xx.xx/SampleService/Handler.ashx",
        type: "GET",
        dataType: "jsonp",
        jsonp : "callback",
        success: function(data) {alert("Success");},
        error: function(data) { alert("Error"); }

        });        
   });

在你的 php 页面返回结果是这样的

echo $_GET['callback'] . "($result)";exit;

其中 $result 是您的 json_encoded 数组。

于 2013-04-15T05:43:21.820 回答
0

您看到的 jQuery19108131180874027861_1366004862133 是一个自动生成的回调包装函数,当您不指定回调函数时,jQuery 会附加该函数。即你有回调=?。如果您有权访问正在调用的服务器端脚本,则可以将 JSON 包装在一个函数中,并使用 JSONP 调用它来解决跨域问题。即 - 将您的回调函数命名为 jsonCallback。

服务器端脚本输出:

jsonCallback(
    {
        [insert your json code here]
    }
);

然后客户端:

(函数($) { var url = ' http://www.jquery4u.com/scripts/jquery4u-sites.json?callback= ?';

$.ajax({
   type: 'GET',
    url: url,
    async: false,
    jsonpCallback: 'jsonCallback',
    contentType: "application/json",
    dataType: 'jsonp',
    done: function(json) {
       console.dir(json);
    },
    fail: function(e) {
       console.log(e.message);
    }
});

})(jQuery);

进一步阅读:JQUERY 的 JSONP 举例说明

于 2013-04-15T06:01:00.697 回答