2010-10-17 50 views
2

我在我的網站上創建了一個生成JSON字符串的search.php文件,幫助我爲我的應用程序使用實時ajax。如何在php中創建一個類似twitter的search.json

但是現在,我想將其作爲其他API的API打開,但是我發現$ .get $ .getJSON $ .ajax不允許使用我的來自其他服務器/域的search.php文件。

我該如何將我的php搜索轉換爲search.json,就像Twitter一樣,將參數傳遞給它。

THX

回答

2

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查詢(或默認爲「回調」)。

+1

Thanx。在上面的代碼中使用jsonpCallback完美的工作。 – guillaumepotier 2010-10-17 21:31:11

+0

您好,我遇到困難重新使用這段代碼在一個函數,在這裏:http://stackoverflow.com/questions/5263259/problem-with-jquery-jsonp-twitter-search-request任何其他好的解決方案 – guillaumepotier 2011-03-20 10:53:59

0

Twitter使用兩種機制允許跨域訪問search.twitter.com域:crossdomain.xml的(對於Flash)及JSONP(JavaScript的)。

隨着JSONP,調用JavaScript包含回調=?參數在URL中,在哪裏?是一個回調函數的名稱。 服務器端腳本包編碼的JSON爲:

?(<JSON here>) 

這將允許查詢參數編碼爲一個腳本標籤的src網址,允許跨域訪問的是XMLHttpRequest的不允許。數據到達時,它將作爲腳本執行。 JavaScript解釋器解碼JSON,因爲它是JavaScript的有效子集,然後使用解碼的JSON作爲參數調用回調函數。它不應該只用幾行代碼就可以在PHP腳本中實現JSONP。

+0

Thanx爲您的燈 – guillaumepotier 2010-10-17 21:31:27

相關問題