繁体   English   中英

我的JSONP代码尝试有什么问题?

[英]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,这似乎不是实际的服务器配置或其他东西。

我究竟做错了什么?

有两个问题:

  1. JSONP中 ,您必须将JSON包装在函数调用中; JSONP就是这样工作的。

    给定您的URL,您的PHP代码的响应应为

     returnText({"result":"10"}) 

    从查询参数中获取q参数,并在响应中将其用作函数名称。 (该参数的通常名称是callback ,尽管您可以根据需要将其命名为其他名称。)

  2. 您已经说过,调用PHP文件的script元素位于head ,但是定义returnText回调的script元素位于主体内。 这与您显示的script元素不起作用,因为in- head将停止页面的所有分析,使浏览器等待检索到它,然后只有在检索并运行它时,它才能继续分析。 这意味着returnText函数还不存在 将查询JSONP的script移到包含回调函数的script 之后会更有意义。 (并且您可能会考虑asyncdefer它。)

暂无
暂无

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

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