为什么新行无法在此javascript警报窗口中运行?

时间:2012-01-23 05:57:03

标签: javascript jquery ajax alert

我看到警报窗口和新行有很多不同的问题。大多数是\n被认为是PHP中的新行而不是发送到javascript。

在我的情况下,字符串将在显示\n的新窗口中输出。我只是尝试通过jsfiddle将\n写入一个警告框,这很有效,所以它必须是我做事的方法......

这是返回控制台的字符串。如你所见,\ n肯定存在:

Username is required\nPassword is required\nEmail is required\nPhone is required\nCardnumber is required

然而,它显示如下:

An alert with \n instead of a new line

为什么会这样?我认为它可能与数据类型有关,因为它是从$.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();
        }
    });
}

4 个答案:

答案 0 :(得分:19)

如果您的控制台日志显示\n而不是新行,则表示\已在原始字符串中转义...

比较

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

解决方案

使用.replace()将您的\n换成换行符

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

答案 1 :(得分:3)

最可能的原因是你的PHP代码通过在它前面添加另一个反斜杠来逃避反斜杠。当它到达你的JS代码时,它实际上是

"Username is required\\nPassword is required..."

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

在PHP代码中仔细检查您的JSON序列化方法,并确保它正在按照\ n进行预期。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

IE11 inspect在asp.net生成的隐藏字段上显示了同样的问题 - 它     将其值显示为value =“test line 1 \ ntest line 2”

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

使用element.value.replace(/\\n/g,"\n")     然后在它上面的javascript alert()

中显示正确的行间距字符串

谢谢比利 - 节省了数小时的悲伤