【问题标题】:Trailing spaces in Ajax responseAjax 响应中的尾随空格
【发布时间】:2011-05-13 01:09:14
【问题描述】:

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

我的初始代码类似于

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",差异:"foo" "foo"

然后我尝试了以下方法:

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

但在任何情况下我都无法找到匹配项。例如,在第一个变体中,我得到了令人费解的答案

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

我现在有点发疯了。我可能做错了什么?

【问题讨论】:

    标签: javascript jquery ajax unit-testing qunit


    【解决方案1】:

    你可以$.trim()(jQuery 修剪,因为 IE

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

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

    【讨论】:

    • 我试图改变行尾,但还是不行。但是 $.trim 完成了它的工作。如何检查末尾附加了什么样的空格?
    • 对不起,我之前的评论有点太鲁莽了。即使更改行尾,我仍然有问题。但是 trim 似乎会削减字符串末尾附加的任何空格。
    • @Andrea - 我会在另一个编辑器中打开它,它会显示所有特殊字符,我个人使用 Notepad2,但那里有很多,例如 Notepad++
    • 感谢 Nick,这帮助我测试了 ajax(来自 php echo)数据返回:if($.trim(data))
    【解决方案2】:

    我也有类似的——是的,很可能是行尾;我必须删除“\r”和“\n”以确保它正常工作。另一种获得预期结果的方法是使用 JSON。获取 AJAX 调用以返回(例如)

    { "Text":"foo" }
    

    然后像这样测试:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-25
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多