2013-07-20 87 views
1

這個問題一直讓我發瘋。我一定在做一些非常愚蠢的事情,但我無法弄清楚它是什麼。使用Q和jQuery進行Ajax調用

我想在QQuery中使用Q promise庫。我有0.9.6版本的Q和1.9.1的jQuery(都是通過bower安裝的)。

This discussion指(末),這樣的事情應該工作:

var promise = Q.when($.get("https://github.com/kriskowal/q")); 

我不能完全告訴我們,如果這是怎麼用Q使用jQuery 1.9.1版本(有顯然是一個在承諾方面,jQuery有很多變化)。但是如果我從Firefox的控制檯(使用當前頁面加載的Q和jQuery)解決這個問題,Ajax調用顯然會被正確觸發(Firebug意味着返回狀態代碼爲200)。但承諾似乎已被拒絕(據我所知)。

例如,如果我這樣做:

promise.inspect(); 

它列出了統計的爲不合格。如果我觸發我的承諾,像這樣的東西:

var promise = Q.when($.get("https://github.com/kriskowal/q")).fail(function(x) { console.log("Failed"); }) 

如果我看看傳遞給fail方法作爲一個參數,它看起來像一個jQuery承諾對象(至少據我可以告訴),它並沒有真正發揮多大作用(似乎很難達到作爲失敗原因的條件)。

我嘗試了各種排列和組合,但我想我應該吸引到SO而不是在黑暗中徘徊。

任何幫助在這裏非常感謝。

回答

0

好的,我認爲這個問題的核心可能是一個CORS問題。我在服務jQuery和Q庫的網站(即我上面運行Firebug會話時加載的頁面),沒有任何Origin標題。

我必須深入研究以確認這一點,但是當我從API嘗試訪問的同一站點提供jQuery和Q時(通過Ajax),事情就開始奏效。如果Firebug和/或jQuery在各種承諾失敗時實際傳播了CORS錯誤,那本來就不錯。 :-(