繁体   English   中英

使用jQuery无法理解JSONP

[英]Trouble understanding JSONP with jQuery

如果我希望从远程服务器获取数据,那么我相信JSONP是首选工具。 但是我看到的一个例子使我感到困惑:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript">

    $(document).ready(function() {

        $.ajax({
            dataType: 'jsonp',
            data: 'p3=c',
            jsonp: 'callback',
            url: 'http://someserver.com/app?p1=a&p2=b',
            success: function (data) {
                console.log("data="+data);

                $.each(data, function (i, r) {
                    console.log("i="+i);
                    console.log("r="+r);
                });
            },
        });
    });

</script>

我可以看到,在请求中,添加了一个回调参数,其值的格式为jQuery1234567890。 当我查看处理该请求的应用程序时,它会从请求中提取回调参数,并包装要返回的json数据以及相应的括号,因此最终返回如下内容:

jQuery1234567890([{"x":"100","y":"101"},{"x":"200","y":"201"}])

所以我的第一个问题是:

(1)应用是否正确完成了已有的工作?

(2)jQuery / JSONP实际上为我们做了什么?

我以为jQuery将看到“ jsonp”的dataType,将脚本标签插入DOM,然后浏览器将下载并执行脚本。 如果是的话,jQuery是否创建了函数jQuery1234567890,其实现是将参数传递给成功函数?

(3)我的理解正确吗(我认为不是)?

谢谢,

保罗

(1)应用是否正确完成了已有的工作?

是的,这是正确的JSONP格式

(2)jQuery / JSONP实际上为我们做了什么?

通过在请求中放置&callback=jQuery1234567890通知服务器应用程序需要JSONP

我以为jQuery将看到“ jsonp”的dataType,将脚本标签插入DOM,然后浏览器将下载并执行脚本。 如果是的话,jQuery是否创建了函数jQuery1234567890,其实现是将参数传递给成功函数?

(3)我的理解正确吗(我认为不是)?

是的,您的理解是正确的。 它创建了一个带有jQuery1234567890函数的script ,该脚本在加载请求的脚本时被调用。 正如您所说的,该参数接收数据并将其传递给$.ajax内部函数,后者将调用success回调

ajax文档获取jsonp选项:

覆盖jsonp请求中的回调函数名称。 将使用此值代替'callback =?'中的'callback'。 网址中查询字符串的一部分。 因此{jsonp:'onJSONPLoad'}将导致'onJSONPLoad =?' 传递给服务器。

因此,使用jsonp: 'callback'覆盖callbackcallback ,基本上是什么都不做。

您看到的其他内容是由jQuery生成的,因此您不必自己做。 您可以像对待jquery中的任何其他ajax请求一样简单地对待此请求,而不必担心jsonp的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM