【问题标题】:external URL AJAX and JSON PHP side of things外部 URL AJAX 和 JSON PHP 方面
【发布时间】:2013-01-07 22:19:20
【问题描述】:

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

【问题讨论】:

标签: php jquery ajax json


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 现在完全说得通了。感谢您抽出宝贵时间回答这个问题。
【解决方案2】:

您必须为 jsonp 请求添加回调

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 感激不尽。它快把我逼疯了!现在完全有道理。它会让我在 5 分钟内接受这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多