2013-03-21 85 views
0

我有這個php文件(courses.php)在一個單獨的域。getJSON in jquery&json_encode in PHP&headers

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

$array = array(); 
$array[0]["id"] = "1"; 
$array[1]["id"] = "2"; 
$array[2]["id"] = "3"; 

$array[0]["coursename"] = "Course Name 1"; 
$array[1]["coursename"] = "Course Name 2"; 
$array[2]["coursename"] = "Course Name 3"; 


echo json_encode($array); 

?> 

我使用JSONP來訪問下面的數據在本地主機。

$.getJSON('http://example.info/mobile/courses.php?callback=?', function(result) { 
     console.log(result); 
}); 

它不起作用。但是,如果我更改URL嘰嘰喳喳像下面它的工作原理

$.getJSON('http://search.twitter.com/search.json?q=dogs&callback=?', function(result) { 
     console.log(result); 
}); 

據我所知,這應該是文件。但我不知道如何解決這個問題。

可能是什麼問題?我怎樣才能解決這個問題?

+0

Twitter的響應標頭是'Content-Type \t application/json; charset = utf-8' – rab 2013-03-21 09:14:06

+0

就這樣你知道,即使你解決了這個問題,現在任何一天Twitter都會關閉它的API部分,因爲它已棄用,這將不再有效。爲了使它工作,請訪問以下插件頁面,並查看示例和設置說明(您將不得不修改示例PHP代碼以使用搜索API,但除此之外,它是相同的):http:/ /zkniebel.github.com/jquery-twitter-feed/ – 2013-03-22 18:04:09

回答

1

您的腳本不會返回JSONP,而是JSON。 JSONP的響應是帶有一個函數調用的JavaScript「文件」,其中函數名稱來自callback參數。

因此而不是隻返回

{"bar": 42} 

你必須回到

foo({"bar": 42}); 

包括在你的輸出函數名:

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

您可能還需要使用一些明智的如果$_GET['callback']不存在,則默認爲默認值,或者直接返回JSON。如果您不需要或不能使用JSONP(例如從另一個服務器端腳本調用URL),這很有用。


注:「JSONP」這個名字有點誤導,因爲這種技術實際上並沒有什麼關係JSON。您生成的響應是純JavaScript代碼,您可以將任何內容傳遞給函數調用,它不必是JSON編碼和對象解釋的數據結構(它可以是任何有效的JavaScript數據類型)。

+0

超棒的男人。謝謝 – Techie 2013-03-21 09:11:05

+0

如果你可以請更詳細解釋一下,因爲你的細節真的很有幫助。 – Techie 2013-03-21 09:17:38

+0

我應該多說些什麼?也許這有助於:https://en.wikipedia.org/wiki/JSONP。 – 2013-03-21 09:20:00