Ajax响应中的尾随空格

时间:2010-11-20 10:27:46

标签: javascript jquery ajax unit-testing qunit

我正在尝试使用Qunit来测试一些代码,但我在Ajax调用方面遇到了一些问题。我甚至无法使用jQuery方法使用最简单的Ajax调用来正确测试它们。问题似乎是,无论我做什么,都会在textResponse上附加一个尾随空格。

我的初始代码类似于

asyncTest('Ajax calls', function() {
    expect(1);

    $.get('ajax.txt', {}, function(response) {
        equal(response, 'foo', 'Ajax calls work correctly');
    });

    setTimeout(function() {
        start();
    }, 600);
});

其中ajax.txt是包含字符foo的文本文件。此测试失败,报告

  

Ajax调用正常工作,预期:“foo”结果:“foo”,diff:“foo”“foo”

然后我尝试了以下内容:

  • 我测试了“foo”(包括尾随空格)
  • 我在测试之前完成了response.replace(' ', '')
  • 我改变了ajax.txt文件的字体编码
  • 我已经在Firefox和Chrome中测试了它,每次都清理缓存
  • 即使使用==比较
  • ,我也在警报内手动测试了相等性

但在任何情况下我都无法获得比赛。例如,在第一个版本中,我得到了令人费解的答案

  

Ajax调用正常工作,预期:“foo”结果:“foo”,diff:“foo”

我现在有点生气了。我可能做错了什么?

2 个答案:

答案 0 :(得分:4)

你可以$.trim()(jQuery修剪,因为IE< 9本身没有它)结果,如下所示:

equal($.trim(response), 'foo', 'Ajax calls work correctly');

为什么会发生这种情况?这可能是格式错误,例如Unix与Windows系列的结局在你身上蔓延。

答案 1 :(得分:0)

我有类似的 - 是的,非常可能是行结尾;我不得不删除“\ r”和“\ n”以确保它正常工作。获取您所使用的内容的另一种方法是使用JSON。获取AJAX调用以返回(例如)

{ "Text":"foo" }

然后测试:

equal(response.Text, 'foo', 'Ajax calls work correctly');

您需要在jQuery AJAX调用中将AJAX返回类型设置为json。