2010-03-23 57 views
0

我想使用mootools和SqueezBox類來處理對RESTful服務的請求。我不想使用任何服務器端腳本。我正在使用AJAX。我使用GET方法向以下URL發送請求。 http://www.idevcenter.com/api/v1/links/links-upcoming.json 但我收到404錯誤。是否因爲跨站點腳本?這裏是我的代碼:Ajax和REST:我可以向REST服務發送ajax請求以接收響應嗎?

 
SqueezeBox.initialize({handler:'url',ajaxOptions:{method:'GET'}}); 
$('a.modal').addEvent('click',function(e){ 
    new Event(e).stop(); 
    SqueezeBox.fromElement($('a.modal')); 
}); 

在螢火蟲控制檯,有時'中止'顯示,有時'404'。這是什麼錯?

回答

2

XMLHttpRequest受Same Origin Policy;如果您的JavaScript運行的文檔與您嘗試撥打的服務來源不同,則出於安全原因,該電話將被禁止。

現在有一個建議標準cross-origin resource sharing來解決這個問題。這可能是您嘗試使用的服務支持它;如果是這樣,使用實現CORS的瀏覽器(Firefox和Chrome的最新版本,以及其他一些瀏覽器)可能會起作用。 IE8 supports it,但要求你做額外的工作。

+0

我在我的請求中看到了一些標題,它似乎是跨源標題。我得到的迴應,但與404錯誤。所以我認爲是打電話。 訪問控制請求方法:獲取 訪問控制請求頭:x請求與 – 2010-03-23 12:16:05

+0

是的,這些都是CORS請求頭(應該有一個「Origin」)。如果你得到了一個404(我錯過了你原來的問題!),那*應該*表示該資源根本不在該URL上,而不是你無法訪問它(這就是401, 403等等 - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。所以我會再次檢查網址。 – 2010-03-23 12:22:04

+0

更新:我只是試了一下,我得到了同樣的結果:直接的瀏覽器請求給了我JSON,但我無法通過XHR加載它。原因是idevcenter正在使用404來響應OPTIONS請求,這意味着它們不支持CORS(或者至少沒有預先計劃的CORS)。我本來會想到404以外的東西,但是,嘿,CORS是新的。可能值得問他們是否會考慮。 – 2010-03-23 12:29:18

0

您不能使用XMLHttpRequest(即普通的「ajax」)在不在您的域中的服務器上調用服務。

但是,您可以使用JSONP技巧,它利用瀏覽器從其他域加載JavaScript的事實。但是,該服務必須知道您將要這樣做,並且必須瞭解該協議。這個特定的服務看起來非常願意給我一個JSON響應,但是當我給它一個「回調」參數時它並不注意。 (我已經嘗試了「回調」和「jsonp」,並且返回的JSON blob是相同的,沒有函數調用封裝。)

+0

感謝您的關注。如果無法發送請求,爲什麼我得到404錯誤的響應?我認爲如果沒有通話,我不應該從服務器得到迴應。 – 2010-03-23 12:19:19

相關問題