6

我无法使用jQuery.support.cors = true; 行从下面的代码中打印成功;. 包括行jQuery.support.cors = true; 会给出警告信息。那么如何在不丢失功能的情况下避免这种情况呢?我的主要目标是调用一个返回 JSON 数据的 REST Web 服务,我必须利用 JSON 数据。请帮助我如何实现这一目标。请提供工作样本

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery.getJSON demo</title>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<script>
    jQuery.support.cors = true;
    $.ajax ({
        url: 'http://json-cricket.appspot.com/score.json',
        datatype: "json",
        success: function (e) {
            // Success callback
            alert("sucess");
        }})
</script>
 
</body>
</html>
4

5 回答 5

9
  1. 您可能错过了添加type //GET 或 POST,哪种类型的 REST OPEATION
  2. dataType拼写错误
  3. 错过添加contentType

 $.ajax({
            type: "POST", //rest Type
            dataType: 'jsonp', //mispelled
            url: "http://json-cricket.appspot.com/score.json",
            async: false,
            contentType: "application/json; charset=utf-8",
            success: function (msg) {
                console.log(msg);                
            }
 });

更新: 在试图找出原因时,我认为这是理解问题的最佳答案。

假设您在域 abc.com 上,并且想要向域 xyz.com 发出请求。为此,您需要跨越域边界,这是大多数浏览器领域的禁忌。

绕过此限制的一项是标签。当您使用脚本标签时,域限制被忽略,但在正常情况下,您无法对结果做任何事情,脚本只是被评估。

输入JSONP当您向启用 JSONP 的服务器发出请求时,您会传递一个特殊参数,该参数会告诉服务器一些关于您的页面的信息。这样,服务器就能够以您的页面可以处理的方式很好地包装其响应。

于 2013-09-24T11:55:23.013 回答
3

最好的方法是使用 jsonp 请求。为此,只需指定dataTypejsonp

$.ajax({
    url: 'http://json-cricket.appspot.com/score.json',
    dataType: 'jsonp',
    success: function (data) {
        console.log(data);        
    }
});

请参阅jsFidle上的示例

于 2013-09-24T12:07:45.290 回答
0

CORS(跨域资源共享)与 XSS 不同。

$.support.cors包含测试当前浏览器是否支持 cors 的测试结果。更改它不会使浏览器支持 cors。

此外,您的服务器必须CORS通过返回正确的标头来支持。

于 2013-09-24T12:00:41.627 回答
0

试试这个,它会给出最好的结果。这个用在REST Architecture中,响应速度非常快

function CallService(sucessData) {
    $.ajax({
        // Add code for Cross Domain
        headers: getHeaders(),
        type: varType, //GET or POST or PUT or DELETE verb
        url: varUrl, // Location of the service
        data: varData, //Data sent to server
        contentType: varContentType, // content type sent to server
        dataType: varDataType, //Expected data format from server
        processdata: varProcessData, //True or False
        crossDomain: true,
        timeout: 200000,
        success: sucessData,
        error: function (xhr) {// When Service call fails
            alert("Error: " + xhr.responseText);
        }
    });
}
于 2014-08-05T05:33:39.390 回答
-1

如果你请求跨域服务,那么你需要包含jQuery.support.cors = true; . 正确的 AJAX 代码是:

 $.ajax ({
    url: 'http://json-cricket.appspot.com/score.json',
    dataType: "json",
    contentType: "application/json",
    success: function (jsonData) {
        // Success callback
        alert("sucess");
    },
    error: function() {
        //any error to be handled
    }
 });
于 2013-09-24T11:58:35.643 回答