2013-01-24 61 views
1

我知道,現代的瀏覽器不允許AJAX請求國外網址,解決方法是JSON編碼和我做了這樣的:外部URL AJAX和JSON PHP側

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請求?我通常以不同的方式做,但因爲我試圖訪問我的另一個網站上的文件,我一直在尋找發送請求的正確方式,這就是我想出的。不知道我做錯了什麼。

+1

重複? http://stackoverflow.com/questions/6809053/simple-jquery-php-and-jsonp-example – sascha

+0

我在這裏尋找類似的東西。謝謝 – Silas

回答

2

你需要實現一個回調函數才能工作。您將需要使用在$_GET['callback']中定義的回調函數來包裝您的json_encode。例如,echo $_GET['callback']."(".json_encode($JSONData).")";

+0

不夠感謝你。這讓我瘋狂!現在完全合理。它會讓我在5分鐘內接受這個答案。 – Silas

1

您必須添加回調JSONP請求

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

我知道,現代的瀏覽器不允許AJAX請求國外網址,

相反,現代的瀏覽器允許,如果你告訴他們(見CORS

解決方法是JSON 編碼,但是JSONP,使用動態<script>元素加載外部源的技術。對於這項工作,源必須是可執行的JavaScript,這是那裏的callback參數發揮作用:

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

參數將是一個函數的名字,但你沒有在你的JS關心的是代碼,JQuery.getJSON可以透明地處理它。

+0

現在完全有意義。感謝您花時間回答這個問題。 – Silas