1

この問題は私を夢中にさせています。私は本当にばかげたことをしているに違いありませんが、それが何であるかわかりません。

Q promises ライブラリを jQuery で使用したいと考えています。私は Q のバージョン 0.9.6 と jQuery の 1.9.1 を持っています (両方とも bower 経由でインストールします)。

この議論は、(最後に)次のようなものが機能することを意味します。

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

これが jQuery バージョン 1.9.1 で Q を使用する方法であるかどうかは完全にはわかりません (promise に関して 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 promise オブジェクトのように見えます (少なくとも私が知る限り)。失敗の「理由」)。

あらゆる順列や組み合わせを試しましたが、これ以上迷うのではなく、SO にアピールする必要があると考えました。

ここで何か助けていただければ幸いです。

4

1 に答える 1

0

OK、この問題の核心はおそらく CORS の問題だと思います。OriginjQuery および Q ライブラリを提供していたサイト (つまり、上記の Firebug セッションを実行したときにロードしたページ) にはヘッダーがありませんでした。

これを確認するには掘り下げる必要がありますが、(Ajax 経由で) アクセスしようとしている API と同じサイトから jQuery と Q を提供すると、動作が開始されました。さまざまな約束が失敗したときに、Firebug や jQuery が実際に CORS エラーを伝播していればよかったのに。:-(

于 2013-07-20T18:37:22.610 に答える