外部URL AJAX和JSON PHP方面的东西

时间:2013-01-24 08:12:40

标签: php jquery ajax json

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您必须为jsonp请求添加回调

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

答案 2 :(得分:1)

  

我知道现代浏览器不允许对外国URL进行AJAX请求,

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

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

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

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