1

这个问题一直让我发疯。我一定在做一些非常愚蠢的事情,但我无法弄清楚它是什么。

我想将 Q Promise 库与 jQuery 一起使用。我有 0.9.6 版的 Q 和 1.9.1 版的 jQuery(都通过 bower 安装)。

这个讨论暗示(最后)这样的事情应该起作用:

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

我不能完全判断这是否是如何将 Q 与 jQuery 版本 1.9.1 一起使用(jQuery 显然在 promise 方面发生了很多变化)。但是,如果我从 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 而不是仅仅在黑暗中跌跌撞撞。

非常感谢您提供任何帮助。

4

1 回答 1

0

好的,我认为这个问题的核心可能是 CORS 问题。我提供 jQuery 和 Q 库的站点(即我在上面运行 Firebug 会话时加载的页面)没有任何Origin标题。

我必须深入研究以确认这一点,但是当我从与我试图访问的 API 相同的站点(通过 Ajax)提供 jQuery 和 Q 时,事情开始起作用了。如果 Firebug 和/或 jQuery 在各种承诺失败时实际上传播了 CORS 错误,那就太好了。:-(

于 2013-07-20T18:37:22.610 回答