我在我的網站上創建了一個生成JSON字符串的search.php文件,幫助我爲我的應用程序使用實時ajax。如何在php中創建一個類似twitter的search.json
但是現在,我想將其作爲其他API的API打開,但是我發現$ .get $ .getJSON $ .ajax不允許使用我的來自其他服務器/域的search.php文件。
我該如何將我的php搜索轉換爲search.json,就像Twitter一樣,將參數傳遞給它。
THX
我在我的網站上創建了一個生成JSON字符串的search.php文件,幫助我爲我的應用程序使用實時ajax。如何在php中創建一個類似twitter的search.json
但是現在,我想將其作爲其他API的API打開,但是我發現$ .get $ .getJSON $ .ajax不允許使用我的來自其他服務器/域的search.php文件。
我該如何將我的php搜索轉換爲search.json,就像Twitter一樣,將參數傳遞給它。
THX
getJSON受限於您的瀏覽器鎖定非原始域的安全限制。爲了完成跨域,你必須使用JSONP,它要求你將數據包裝在由回調變量定義的函數中(例如$ _GET ['jsonp_callback'])。例如
的search.php
<?php
echo $_GET['jsonp_callback'] . '(' . json_encode($data). ');'
// prints: jsonp123({"search" : "value", etc. });
?>
jQuery的
$.ajax({
dataType: 'jsonp',
data: 'search=value',
jsonp: 'jsonp_callback',
url: 'http://yourserver.com/search.php',
success: function() {
// do stuff
},
});
只要確保你在你的PHP腳本定義回調變量,你可以通過調用JSONP值相匹配。 ajax查詢(或默認爲「回調」)。
Twitter使用兩種機制允許跨域訪問search.twitter.com域:crossdomain.xml的(對於Flash)及JSONP(JavaScript的)。
隨着JSONP,調用JavaScript包含回調=?參數在URL中,在哪裏?是一個回調函數的名稱。 服務器端腳本包編碼的JSON爲:
?(<JSON here>)
這將允許查詢參數編碼爲一個腳本標籤的src網址,允許跨域訪問的是XMLHttpRequest的不允許。數據到達時,它將作爲腳本執行。 JavaScript解釋器解碼JSON,因爲它是JavaScript的有效子集,然後使用解碼的JSON作爲參數調用回調函數。它不應該只用幾行代碼就可以在PHP腳本中實現JSONP。
Thanx爲您的燈 – guillaumepotier 2010-10-17 21:31:27
Thanx。在上面的代碼中使用jsonpCallback完美的工作。 – guillaumepotier 2010-10-17 21:31:11
您好,我遇到困難重新使用這段代碼在一個函數,在這裏:http://stackoverflow.com/questions/5263259/problem-with-jquery-jsonp-twitter-search-request任何其他好的解決方案 – guillaumepotier 2011-03-20 10:53:59