19

我下载 Jquery UI 自动加载,寻找 remote-jsonp.html。这是 ajax 函数,但我打开控制台.. 我在控制台中看不到任何请求...

dataType;"jsonp" 和 dataType;"JSON" 有什么区别

$( "#city" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                url: "http://ws.geonames.org/searchJSON",
                dataType: "jsonp",
                data: {
                    featureClass: "P",
                    style: "full",
                    maxRows: 12,
                    name_startsWith: request.term
                },
                success: function( data ) {
                    response( $.map( data.geonames, function( item ) {
                        return {
                            label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
                            value: item.name
                        }
                    }));
                }
            });
        },

参考 http://jqueryui.com/demos/autocomplete/remote-jsonp.html

4

2 回答 2

31

dataType: jsonp对于跨域请求,这意味着对不同域的请求和dataType: json对同域同源请求的请求。

使用 JSONP 加载 JSON 块。添加一个额外的“?callback =?” 到 URL 的末尾以指定回调。通过将查询字符串参数“_=[TIMESTAMP]”附加到 URL 来禁用缓存,除非缓存选项设置为 true。

阅读同源政策

阅读有关jQuery AJAX的更多信息

于 2012-06-01T14:58:53.660 回答
8

使用 JSONP,如果您正在寻找的是 ajax 请求,您不应该看到它。但是,您应该会看到对该资源的请求,因为 JSONP 用于跨域调用以从不同域中提取数据。

它返回包装在函数名称中的 JSON 数据。jQuery 在后台处理函数名称并将数据传递到您的成功处理程序。数据是通过动态创建一个脚本元素来加载的,该元素的 src 属性指向被调用的服务,然后附加到浏览器的 DOM。然后浏览器向资源发出请求,Web 服务以回调函数和数据进行响应。

于 2012-06-01T15:00:02.670 回答