为什么JavaScript警告窗口中的换行符无法正常工作?

9
我注意到警告窗口和换行符有几个不同的问题。大多数情况下,\n在PHP中被视为新行而不是发送到JavaScript。
在我的情况下,字符串被输出到显示\n的新窗口中。我刚刚尝试通过jsfiddle将\n写入警告框,它起作用了,所以这一定是我的做事方式的问题...
这是返回给控制台的字符串。正如您所看到的,\n肯定存在:
Username is required\nPassword is required\nEmail is required\nPhone is required\nCardnumber is required
然而,它显示为:
为什么会发生这种情况?我认为这可能与数据类型有关,因为它是从$.ajax返回的。
if (canAjax && !try_ajax) { 
    e.preventDefault();
    $.ajax({
        type: "POST", 
        url: "mobilesubmit.php",
        data: {"use_ajax": true, "formdata": $("#register_form").first().serializeArray()},
        success: function(data) {

            // This stupid thing should make new lines!
            alert(data);

            console.log(data);
        },
        error: function (request, status, error) {
            try_ajax = true;
            $("#register_form").submit();
        }
    });
}

请查看此问题/答案 - Behrang
5个回答

20

如果你的控制台日志显示\n而不是换行符,那么这意味着在原始字符串中,\被转义了...

比较

console.log(1,"\\n\\n");
console.log(2,"\n\n");

解决方案

使用.replace()\n替换为换行符。

console.log(3,"\\n\\n".replace(/\\n/g,"\n"))

哈哈,那可能就是了。我在写一大堆描述同样事情的文字时,你已经发布了这个回答。我会删除我的回答并将此标记为正确的。这就是问题所在。(我以为Chrome的控制台不会解析新行。我仍然不确定额外的斜杠来自哪里 - 除非这是ajax返回结果的标准。) - Radley Sustaire

4
这种情况最有可能是由于您的PHP代码在反斜杠前面添加了另一个反斜杠来转义它。当它传递到您的JS代码时,实际上变成了“\\”。
"Username is required\\nPassword is required..."

您可以在调试器的网络面板中检查原始响应。如果您尝试在控制台中查看它,它将显示格式化输出而不是原始输出。

仔细检查您在PHP代码中进行JSON序列化的方法,并确保它对 \n 执行您期望的操作。


如果你尝试在控制台中查看它,它会显示格式化输出而不是原始输出。这就是让我困扰的原因。你做得很好,但比利·蒙在你之前就已经解决了这个问题。谢谢。 - Radley Sustaire

1

尝试在 \n 后添加一个空格。它应该可以工作。


不行,我也试过在 \n 前面加上空格,还有两边都加上空格。它被打印出来的样子和原来一样,而不是将标签解析成新的一行(如果这是正确的术语的话)。 - Radley Sustaire
1
你尝试过添加<br />标签作为参考吗? - Sameera Thilakasiri

0

IE11检查显示了一个与asp.net生成的hiddenfield相同的问题 - 它将其值显示为value="test line 1\ntest line 2"

UT实际上包含value="test line 1\\ntest line 2"

在它上面使用element.value.replace(/\\n/g,"\n"),然后在javascript alert()中显示正确的行间距字符串

感谢Billy - 节省了数小时的痛苦


0

不要使用 -> \n

请使用这个 -> \\n

例子

alert('Hello Wrold Second line \n\nThanks!') 

// if only above one ddoesn't work use below one!

alert('Hello Wrold Second line \\n\\nThanks!') 
//<!-- Publisher - Bathila Sanvidu Jayasundara -->


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Kurt Van den Branden
这个对我起作用了。 - Bathila Sanvidu
请解释为什么两个反斜杠可以工作,而一个不行,否则这只是一个代码回答。 - Kurt Van den Branden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接