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

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

在我的例子中,字符串正在一个显示\n的新窗口中输出。 我只是尝试通过jsfiddle将\n写入一个警告框,这很有用,所以它一定是我做事的方法……

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

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

但是,它显示如下:

使用\ n而不是新行的警报

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

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

相比

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

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

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

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

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

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

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

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

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()显示正确的行间距字符串

谢谢比利 – 节省了几个小时的悲伤