jQuery Ajax 方法不返回 XHR 对象

标签 jquery ajax xmlhttprequest

更新1:我还没有弄清楚发生了什么,但这绝对是我的项目的问题。创建一个简单的测试页面后,我能够验证 getJSON 实际上确实返回了一个 XHR 对象,就像它应该的那样。

更新2:哇,这很奇怪。经过更多测试后,我发现如果我指定“callback=?” URL 字符串中的参数 XHR 对象未正确返回。但是,如果我没有指定“callback=?”参数,XHR对象被正确返回。问题是,我正在调用 JSONP 服务,因此“callback=?”参数为必填项。

关于为什么会出现这种情况有什么想法吗?

更新 3:以下是一些独立的代码示例来说明该问题。在第一个示例中,console.log(request) 未定义。当我在第二个代码示例中硬编码回调参数时,console.log(request) 是 XHR 对象。

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    </head>
    <body>
        <script>
            $(document).ready(function() {
                var request = $.getJSON('http://localhost?callback=?', function(data) {

                });
                console.log(request);
            });
        </script>
    </body>
</html>

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    </head>
    <body>
        <script>
            $(document).ready(function() {
                var request = $.getJSON('http://localhost?callback=callback', function(data) {

                });
                console.log(request);
            });
        </script>
    </body>
</html>

更新 4: 根据下面 regilero 的评论,我转而使用 $.ajax 方法并通过数据对象传递参数。以下是请求的完整代码:

var request = $.ajax({
    data: {
        f: 'json',
        geometry: '{x:44.203642291681845,y:-95.79085806500001}',
        geometryType: 'esriGeometryPoint',
        imageDisplay: '727,500,96',
        layers: 'all',
        mapExtent: '-179.462733065,16.116769346042226,-51.669764315000016,71.57609342040729',
        returnGeometry: false,
        tolerance: 10
    },
    dataType: 'jsonp',
    success: function(data) {
        console.log(data);
    },
    url: 'http://server.arcgisonline.com/ArcGIS/rest/services/Specialty/Soil_Survey_Map/MapServer/identify'
});
console.log(request);

如果我在配置对象中指定“dataType: 'jsonp'”,则 console.log(request) 再次未定义。但是,如果我指定“dataType: 'json'”,console.log(request) 就是 XHR 对象。

此行为与我使用 $.getJSON 快捷方式遇到的情况一致。

<小时/>

原始问题

根据 stackoverflow 问题/答案:Abort Ajax requests using jQuery以及本网站和其他网站上的许多其他问题/答案,jQuery Ajax 方法应该返回 XHR 对象。

但是,当我运行以下代码时,请求是“未定义”。

var request = $.getJSON(url, function(data) {
    console.log(data);
});

console.log(request);

我错过了 jQuery 的更改吗?我使用的是 1.4.4。

最佳答案

jsonp不使用 XMLHTTPRequest。它是同源策略的一种解决方法,适用于所有 XMLHTTPRequest;它的工作原理是插入 <script>相反,将标签添加到 DOM 中,要求服务器返回一个封装在 JS 函数中的 JSON 对象,由 callback=? 表示。参数。

由于未使用 XMLHTTPRequest,因此不会返回该类型的对象。

关于jQuery Ajax 方法不返回 XHR 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4630467/

相关文章:

javascript - html5数据元素中的数字很大

javascript - 如何将分号分隔的数据转换为 DataTable 单元格中的单独行

jquery - 在点击函数中使用appendTo和Load

javascript - XHR 和标准执行之间的身份验证区别

javascript - html 雅虎股票不能在两个 DIV 中工作

jquery - 如何让jquery脚本重新启动?

javascript - Rails/Javascript : Data attribute not returned through partial, 但存在于 DOM 中

javascript - 我如何告诉 PHP 提交了哪个表单

xml - 从 xml 文件在 google maps API V3 中添加标记

javascript - 是否有 UnicodeData.txt 的官方副本可通过 HTTP 使用 CORS 访问?