Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Javascript 没有回调的JSONP是如何工作的?_Javascript_Jsonp - Fatal编程技术网

Javascript 没有回调的JSONP是如何工作的?

Javascript 没有回调的JSONP是如何工作的?,javascript,jsonp,Javascript,Jsonp,我正在使用一个客户端SDK,它在引擎盖下创建一个脚本并将其附加到,如下所示: 请注意,没有回调参数 响应返回以下内容(标题为内容类型:application/javascript): {document.cookie=“something=thing”} 它在浏览器中设置cookie(我在dev工具中查看cookie时可以看到) 奇怪的是,在脚本的URL中没有回调参数,正如您通常在JSONP请求中所期望的那样 我试图通过向本地网页添加一个类似的脚本来复制这种行为,并且正在访问一个返回相同响应的

我正在使用一个客户端SDK,它在引擎盖下创建一个脚本并将其附加到
,如下所示:

请注意,没有
回调
参数

响应返回以下内容(标题为
内容类型:application/javascript
):

{document.cookie=“something=thing”}

它在浏览器中设置cookie(我在dev工具中查看cookie时可以看到)

奇怪的是,在脚本的URL中没有回调参数,正如您通常在JSONP请求中所期望的那样

我试图通过向本地网页添加一个类似的脚本来复制这种行为,并且正在访问一个返回相同响应的本地服务器,但与SDK不同,它没有设置cookie。SDK本身非常简单,我看不到任何其他神奇的事情发生

以前有人见过这样的东西吗?它是如何工作的

编辑:下面是内部SDK方法和示例响应

样本响应:

响应头

Connection: keep-alive
Content-Encoding: gzip
Content-Length: 158
Content-Type: application/javascript
响应体


{document.cookie=}

尽管API源代码中有方法名,但它不是JSONP

JSONP是一个符合以下特定格式的JavaScript程序:只包含一个函数调用和一个参数,如果从JavaScript程序中取出并放入JSON文件,则该参数将为JSON

JSONP通过注入一个
元素来加载和执行JavaScript程序

这里的JavaScript程序不符合JSONP格式

它仍然是一个JavaScript程序


使用
加载仍然有效。

这不是真正的jsonp请求。它实际上只是一个javascript文件。@KevinB是的,我想我只是想知道这个响应是如何执行的。此外,他们在幕后称之为
\u jsonp
方法,所以我假设他们的意图是发出一个jsonp请求。这不是jsonp请求,因为请求没有返回jsonp。它正在返回javascript。jsonp响应也是javascript,但并非所有javascript都是jsonp。@KevinB好的,让我们假设他们的方法名
jsonp
只是一个误称。我们还没有回答关于如何执行响应的问题。FWIW,这是整个缩小的SDK,如果你在chrome或其他任何东西中有一个美化器,它可以被读取:所有这些代码所做的就是设置一个cookie。当您包含它时,它将设置一个cookie。那是。。。就是这样
{document.cookie=}
不是一个对象,它只是简单的旧javascript。它很可能只是一个警报('Hello World!'),然后会弹出一个警报。谢谢。FWIW,我没有意识到
{document.cookie=“something=thing”}
是有效的JavaScript,但是当我在浏览器控制台中运行它时,它工作了。将在时间限制到期时接受答案赋值表达式周围的块完全没有意义。
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 158
Content-Type: application/javascript