2011-05-01 50 views
0

我試圖使用$ jQuery.get()通過GET請求調用(私有)RESTful Web服務。但是當我這樣做時,我沒有收到響應數據(儘管我得到了200 OK響應代碼!)。當請求來自瀏覽器或PHP時,RESTful API會返回數據,但不會來自JavaScript。爲什麼?

當我做從PHP完全相同的調用(file_get_contents()函數),或者僅僅通過粘貼獲取URL到我的瀏覽器窗口,我收到(JSON)迴應就好了。

用Firebug,我可以看到絕對的請求頭之間沒有區別時,我提出的要求從jQuery的我送,當我將URL粘貼到我的瀏覽器。唯一的區別是,jQuery的補充「引薦」和「源」頭 - 但,我強行使用Firefox的ModifyHeaders擴展將這兩頭到我的瀏覽器直接的請求,我還是找回數據,因此該服務無法基於Referer/Origin進行過濾。

所以基本上我不知道這到底是怎麼回事,如果我可以讓兩個看似相同的請求,但是未收到任何迴應時,它的通過jQuery的。有沒有一些「隱藏的」標題或參數,我沒有看到哪個服務器可以用來確定請求是通過JavaScript發送的?

我的代碼很簡單,只要$.get("http://example.com/json.php?q=sometext", function(response) { alert(response); });

感謝。

+0

從鏈接中刪除域的'得到()'調用 – 2011-05-01 20:41:39

回答

1

任何你是要發送跨域AJAX請求違反same origin policy機會呢?如果不確保服務器將適當的Content-Type標頭設置爲application/json,以便jQuery自動爲您提供可在成功回調中使用的已分析對象。也可以嘗試通過一個相對URL到$.get功能:

$.get("/json.php?q=sometext", function(response) { 
    alert(response); 
}); 
+0

啊,對不起,忘了提,這是一個遠程服務。但我曾與其他遠程服務合作,直接從頁面上的jQuery調用它們(例如YouTube,Flickr API),並且它們工作得很好。有任何想法嗎?謝謝。 – BigJeffrey 2011-05-01 21:24:13

+0

@BigJeffrey,如果他們使用JSONP,那麼它是可能的。用普通的JSON,它不是。 – 2011-05-02 05:52:59

0

試試這個:

$.get("http://example.com/json.php?q=sometext", 
     function(response) { alert(response); }, 
     "json"); 

注意最後一個參數。

+0

謝謝,但這沒有幫助。我也嘗試使用$ .getJSON()。 Firebug報告「200 OK」,但整行是紅色的,旁邊有一個紅色十字圖標 - 但沒有記錄任何錯誤或任何內容(只是一個空白的響應主體)。 – BigJeffrey 2011-05-01 21:23:13

相關問題