外部URL AJAX和JSON PHP方面的事情


external URL AJAX and JSON PHP side of things

我知道现代浏览器不允许对外部URL进行AJAX请求,解决方法是JSON编码,我这样做是这样的:

 function findZipCodesInRadius(userZip, radiusInMiles) {
     $.getJSON("http://mydomain.com/php/zipCodesInRadius.php?callback=?", {
         TheUserZip: userZip,
         TheRadiusInMiles: radiusInMiles
     },
     function (data) {
         alert("Data Loaded: " + data);
     });

 }

在PHP方面,我让它像这样"回显"结果:

$JSONData = array("callback"=>"true"); 
echo json_encode($JSONData); 

在谷歌周围查看后,上面的代码是我发现的,它仍然不起作用。如何正确回显回调?也许我不正确地执行了 ajax 请求?我通常以不同的方式执行此操作,但是因为我正在尝试访问我的另一个网站上的文件,所以我一直在寻找发送请求的正确方式,这就是我想出的。不知道我做错了什么。

您需要实现一个回调函数才能使其正常工作。您需要使用 $_GET['callback'] 中定义的回调函数包装json_encode。

例如,echo $_GET['callback']."(".json_encode($JSONData).")"; .

您必须为 jsonp 请求添加回调

$JSONData = array("callback"=>"true");
$callback = $_GET['callback'];
echo $callback,'(',json_encode($JSONData),')'; 

我知道现代浏览器不允许对外部 URL 发出 AJAX 请求,

相反,现代浏览器允许这样做,如果你告诉他们(参见 CORS)

解决方法不是 JSON 编码,而是 JSONP,这是一种使用动态<script>元素加载外部源的技术。为此,源代码必须是可执行的JavaScript,这就是callback参数发挥作用的地方:

echo $_GET['callback'] . '(' . json_encode($JSONData) . ')'; 

参数将是一个函数名称,但你不必在JS代码中关心它,JQuery.getJSON会透明地为你处理它。