2012-03-20 76 views
2

我有一個服務器返回一個json結果我的PHP編碼頁。 php文件叫做:getInfoData.php,返回如下。PHP,jQuery Ajax和json通過跨域返回

echo json_encode($v); 

不,我可以用$ .getJSON(??)讀取JSON和在同一服務器運行正常這一切,但我需要的PHP頁面是在不同的服務器比調用它的JS網頁。

但後來我得到了當我做我得到跨域問題。

所以我改爲使用以下(JSONP)代碼:

$.ajax({ 
    url: 'FILE_LOCATION_ON_ANOTHER_SERVER', 
    type: 'GET', 
    crossDomain: true, 
    dataType: 'jsonp', 
    success: function() { console.log("Success"); }, 
    error: function() {console.log('Failed!'); } 
}); 

,但我看不到任何東西我只是得到我的控制檯以下:

http://www.THEURL.com/FOLDER/FILENAME.php?callback=jQuery171013088115444406867_1332256223342&_=1332256223343 

和一條消息說失敗!

我在做什麼錯,以及如果我可以解決這個問題?

謝謝

回答

3

JSONP實際上並不是JSON。這有點「黑客」。 JSONP實際上是一個JavaScript文件,它被下載並運行。

在您的PHP頁面中,您應該通過callback參數。你需要「包裝」你的JSON。它應該是這樣的:

func({json: data}) 

所以,你的PHP應該是這樣的:

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

我用這通常但也許有更好的方法

<?php header('content-type: application/javascript; charset=utf-8'); 

$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); 

echo htmlspecialchars($_GET['callback']) . '('.json_encode($data).')'; 
,因爲我看到了

你提供了一個回調參數一切都應該沒問題

+0

JSONP實際上並不是JSON,它是JavaScript文件被添加到腳本標記。您應該使用'application/javascript' MIME來代替。 – 2012-03-20 15:19:02

+0

@火箭泰克的建議:) – 2012-03-20 15:23:05

+0

感謝您的回覆,在兩個相似的地方 – 2012-03-20 16:19:20