[英]What's wrong with my JSONP code attempt?
所以我在尝试从中获取数据的外部服务器上有一个脚本。
这是一个名为test.php的PHP脚本,其中包含以下内容:
<?php
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$parts = parse_url($url);
parse_str($parts['query'], $query);
$limit = $query['limit'];
$return_array["result"] = $limit;
echo json_encode($return_array);
?>
因此,我使用以下命令向该服务器发送呼叫:
/* this is included in head */
<script src="http://some-website.com/get-text/index.php?limit=10&q=returnText"></script>
/* in Body */
<script>
function returnText(data) {
console.log('result: ' + data);
}
</script>
当您单独转到该php页面时,输出为
{"result":"10"}
但是,当我运行包含JavaScript代码的文件时,出现错误:
index.php?limit = 10&q = returnText:1未捕获的SyntaxError:意外令牌:
当您单击此错误行右侧的链接时,我看到以下内容:
{"result":"10"}
从冒号开始的红色下划线向右移动。
我在某处看到要确保已启用JSONP,这似乎不是实际的服务器配置或其他东西。
我究竟做错了什么?
有两个问题:
在JSONP中 ,您必须将JSON包装在函数调用中; JSONP就是这样工作的。
给定您的URL,您的PHP代码的响应应为
returnText({"result":"10"})
从查询参数中获取q
参数,并在响应中将其用作函数名称。 (该参数的通常名称是callback
,尽管您可以根据需要将其命名为其他名称。)
您已经说过,调用PHP文件的script
元素位于head
,但是定义returnText
回调的script
元素位于主体内。 这与您显示的script
元素不起作用,因为in- head
将停止页面的所有分析,使浏览器等待检索到它,然后只有在检索并运行它时,它才能继续分析。 这意味着returnText
函数还不存在 。 将查询JSONP的script
移到包含回调函数的script
之后会更有意义。 (并且您可能会考虑async
或defer
它。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.