1

我知道现代浏览器不允许对外部 URLS 的 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请求?我通常以不同的方式进行操作,但是因为我试图访问我的另一个网站上的文件,所以我一直在到处寻找发送请求的正确方式,这就是我想出的。不知道我做错了什么。

4

3 回答 3

2

您需要实现一个回调函数才能使其正常工作。您将需要使用定义在$_GET['callback'].

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

于 2013-01-24T08:16:09.013 回答
1

您必须为 jsonp 请求添加回调

$JSONData = array("callback"=>"true");
$callback = $_GET['callback'];
echo $callback,'(',json_encode($JSONData),')'; 
于 2013-01-24T08:16:36.890 回答
1

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

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

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

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

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

于 2013-01-24T08:21:20.803 回答