【问题标题】:Are ajax calls possible without a browser?没有浏览器可以调用ajax吗?
【发布时间】:2015-08-07 21:29:27
【问题描述】:

我正在尝试使用 mocha 和 chutzpah 创建 JavaScript 测试,这意味着我的所有测试都是在无浏览器的情况下完成的。我遇到的问题是我所有的 AJAX 调用都返回一个空字符串,即使以下内容也不起作用:

$.ajax({
    url: "http://www.something.com/",
    //Ajax events
    async: false,
}).done(function(data) {
    test = data;
});

这里,测试设置为'',我也尝试了许多不同的AJAX参数组合,例如asynctypedataTypesuccess等。

所以我的问题是,是否可以在没有浏览器的情况下进行 AJAX 调用?

【问题讨论】:

  • 没有。否则 CRON 解决方案将是不必要的
  • 是的,但您必须先进行设置 - google.com/search?q=mocha+AJAX... 我们将它们称为 requests,而不是 AJAX 调用。
  • 我在这里浏览了解决方案:airpair.com/javascript/posts/… 之前,但他正在使用模拟。我不能将模拟用于我的目的。
  • @gypsydave: “不,如果 jQuery 首先绑定到一个文档对象,你就不能发出 jQuery ajax 请求 - 通常存在于浏览器中。这就是 $(document ) 在 jQuery 脚本的开头" eh?!

标签: javascript jquery ajax mocha.js chutzpah


【解决方案1】:

我快速浏览了一下 chutzpah,它似乎是在 Phantom.js 之上实现的。因此,您不会在没有浏览器的情况下运行测试。相反,您在基于 Webkit 的浏览器中运行测试 - 尽管没有 GUI。

由于您的测试在浏览器中运行,所有浏览器限制都适用。这包括同源策略。因此,根据 chutzpah 加载测试脚本的方式,您的 ajax 调用可能会失败。

如果 chutzpah 从磁盘加载您的测试页面,那么同源策略总是会失败。我对 chutzpah 了解不多,但如果可以的话,让它从 URL 加载你的测试页面(你总是可以在 localhost 上运行测试服务器)。

您实际上可以通过在命令行中传递 --web-security=false 来禁用 Phantom.js 中的安全功能。不知道你会如何从 Mocha 和 chutzpah 做到这一点,但这是你可以调查的另一种选择。

【讨论】:

  • Chutzpah 总是在禁用安全性的情况下运行您的脚本。
【解决方案2】:

所以我的问题很愚蠢。在我使用的框架之上的 Ajax 查询需要“www”。因此,我不需要调用“google.com”,而是需要调用“www.google.com”。 www 重定向不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 2012-05-18
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多