Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请在jQuery中解释JSONP_Jquery_Jsonp - Fatal编程技术网

请在jQuery中解释JSONP

请在jQuery中解释JSONP,jquery,jsonp,Jquery,Jsonp,我无法理解jQuery.ajax的文档,特别是两个选项:jsonp和jsonpCallback,所以有人能这么乐意解释吗 我所理解的是,jsonp是服务器期望的GET参数的名称(通常是“回调”),而jsonpCallback是包装响应的函数的名称。看起来很简单 但是,当时的解释让这有点复杂。我想在这里引用jsonp选项的完整文本,并用粗体标记我不清楚的内容: jsonp 重写jsonp请求中的回调函数名。此值 将在函数的部分中使用而不是“callback=?”中的“callback” url中的

我无法理解jQuery.ajax的文档,特别是两个选项:
jsonp
jsonpCallback
,所以有人能这么乐意解释吗

我所理解的是,
jsonp
是服务器期望的GET参数的名称(通常是“回调”),而
jsonpCallback
是包装响应的函数的名称。看起来很简单

但是,当时的解释让这有点复杂。我想在这里引用
jsonp
选项的完整文本,并用粗体标记我不清楚的内容:

jsonp

重写jsonp请求中的回调函数名。此值 将在函数的部分中使用而不是“callback=?”中的“callback” url中的查询字符串。所以{jsonp:'onJSONPLoad'}将导致 'onJSONPLoad=?'传递给服务器。从jQuery1.5开始,设置 jsonp选项设置为false可防止jQuery添加“”回调 字符串或尝试使用“=?”进行转换。在里面 在这种情况下,您还应该显式设置jsonpCallback设置。 例如,{jsonp:false,jsonpCallback:“callbackName”}

因此,问题是:

1.它是什么意思“=?”“回调=?”(额外问号)?当我执行JSONP AJAX请求时,如下所示:

 $.ajax('http://fake.com',{
     dataType: 'jsonp',
     success: function(data) {console.log(data);}
 }); 
URL如下所示,没有这样的问号:

http://fake.com/?callback=jQuery18104830878316494931_1352981996209&_=1352981999411
2.额外参数(下划线)是什么

3.
这些词是什么意思?在这种情况下,您还应该显式设置JSONPCCallback设置
的含义是什么?我看不出任何相互关系。如果我设置
{jsonp:false,jsonpCallback:“callbackName”}
,正如文档中所说的,查询将如下所示:

http://fake.com/?_=1352981999411
“callbackName”根本没有用处,为什么要指定它呢


非常感谢。

回调名称是可选的,如果您不提供,则使用默认名称。因此,如果您省略了onJsonLoad,您只会得到
回调

发生的事情是JSON被一个函数包装,因为JSONP通过
标记工作,所以您的普通JSON:

{prop: value}
变成:

callback({prop: value});
加载脚本标记后,jQuery可以调用此函数并返回JSON数据


\uu=123456788
只是一个用于停止缓存请求的
日期.getTime()

JSONP背后的思想如下:

由于跨域策略,不允许为外部源请求数据。假设我的服务器有一个函数,如果你输入一个人的电话号码,它会返回他的名字

您的网站不在我的域中,不允许对我的服务器执行ajax调用并接收数据
Flater

这个规则有一个例外,那就是使用外部加载的脚本。我可以加载托管在另一台服务器上的jQuery.js文件等。我不能从外部服务器请求数据,但我可以请求javascript

所以你不可能得到这个结果:

Flater
但可以将此内容放在您的页面上:

<script src="http://externalserver.com/script.js">
会回来吗

<script>
    doSomething("Flater");
</script>
<script>
    banana("Flater");
</script>
<script>
    Process_Name("Flater");
</script>

剂量仪(“更平”);
香蕉(“扁平”);
工艺名称(“扁平机”);
这意味着如果定义了用作回调参数的函数名,则可以有效地告诉外部服务器需要将JSON传递给哪个函数

这是非常方便的,如果你有多个功能,所有需要工作

我希望我能够澄清JSONP的预期用途?如果你有问题,只要问:-)

更新


顺便说一下,我在示例中使用了脚本标记。正如您已经提到的,jQuery已经发展到基本上看起来像一个ajax调用(应该是这样的)。然而,我认为向您解释起作用的核心原则会更容易。

callback=?

当Jquery看到

在某些API中,您需要提供API概述的特定回调

在大多数情况下,服务器只是以php为例使用
$\u GET['callback']
。在你的情况下,它会发回

jQuery18104830878316494931_1352981996209( /* json string*/)
jquery11804830878316494931_1352981996209
是回调


为了更好地理解,请在浏览器控制台网络或网络选项卡中检查jsonp请求。您可以看到jQuery发送的参数,以及完整的响应

在文档中,#1中的问号只是您指定的变量名的占位符。文档还可以说
callback=X
callback=YOUR-callback
什么是
onJsonLoad
?你的意思是
jsonpCallback
?是的,对不起,基本上不管你如何命名回调。你介意我问一下,设置
{jsonp:false,jsonpCallback:“callbackName”}
的原因是什么吗?如果我将
jsonp
设置为
false
,则根本不发送
回调
参数。那么为什么要设置
jsonpCallback
?据我所知,我认为这与显式回调有关,您知道在服务器端生成的回调名称。这意味着,如果知道返回的回调,则无需将其传递到URL。相反,您可以关闭它并指定您知道它是什么。我在这里猜测是因为我自己从未使用过这种参数组合。
<script src="http://externalserver.com/script.js?callback=doSomething">
<script src="http://externalserver.com/script.js?callback=banana">
<script src="http://externalserver.com/script.js?callback=Process_Name">
<script>
    doSomething("Flater");
</script>
<script>
    banana("Flater");
</script>
<script>
    Process_Name("Flater");
</script>
jQuery18104830878316494931_1352981996209( /* json string*/)