Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中使用AJAX POST请求保留文本格式_Javascript_Php_Ajax - Fatal编程技术网

Javascript 在JS中使用AJAX POST请求保留文本格式

Javascript 在JS中使用AJAX POST请求保留文本格式,javascript,php,ajax,Javascript,Php,Ajax,我试图做的是使用一个AJAX请求将一些文本(下面代码中的commentText)传递到PHP页面,使用POST方法混合一些标志(下面代码中的What=add)告诉PHP页面这些文本是什么 我使用post方法,因为它允许我轻松地从PHP页面中的url恢复一些信息: JS脚本: xmlhttp.open("POST", "/comment.php", true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urle

我试图做的是使用一个AJAX请求将一些文本(下面代码中的commentText)传递到PHP页面,使用POST方法混合一些标志(下面代码中的What=add)告诉PHP页面这些文本是什么

我使用post方法,因为它允许我轻松地从PHP页面中的url恢复一些信息:

JS脚本:

xmlhttp.open("POST", "/comment.php", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("what=add&comment=" + commentText);
PHP文件:

if ($_POST['what'] == "add")
{
    print_r($_POST['comment']);
    exit();
    ...
}
这种方法的问题是,由于url编码,当我进入PHP页面时,文本的格式(上面代码中的注释)就消失了。例如,如果注释文本为:

this is some comment.
And I have another line.
在PHP文件中,我得到:

$_POST['comment'] -> "this is some comment. And I have another line."
这张照片不见了。所以说格式很清楚,我的意思是在这个特殊的情况下,返回行(这就是我现在所追求的)

这个问题的解决方案是什么?我想我可以将文本作为纯文本传递,但随后就失去了使用_POST[]功能轻松检索不同字段的能力。这是否意味着我必须以纯文本的形式传递数据,并对文本中的字段进行编码?这是唯一的解决办法还是有更好的办法

这张照片不见了

这与URL编码无关

默认情况下,HTML将任何类型的空白视为“空格”


使用
元素,将新行替换为

元素,或者选择其他方法来更改它。

尝试添加css
空白:pre到目标元素,或在
响应文本中用

替换
\n

var commentText = document.getElementsByTagName("pre")[0].innerText;
xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "/echo/html/", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.onload = function() {
if (xmlhttp.status === 200) {
  var text = xmlhttp.responseText;
    document.body.innerText = text;
};
};
xmlhttp.send("html=" + encodeURIComponent(commentText));
this is a test
on two lines

因此,虽然我真的很感谢大家的意见,但我想,作为记录,我不会再多加上我自己的答案,而是详细介绍一些答案,并描述我最后做了什么

现在,正如昆廷所建议的,但没有明确指出的是,无论数据是通过URL传递还是以任何形式传递,最终如果这些数据(文本)显示到浏览器的页面上,它当然将是HTML文本,在HTML中,正如他所说,每个\n都被视为一个空格

因此,无论您试图做什么,如果您在文本编辑器中得到如下内容:

var output_text = '';
for (i = 0; i < text.length; ++i) {
    if (text.charAt(i) == '\n') {
        output_text += '<br/'>;
    }
    else if ...
}
它将在浏览器中呈现为这样:
这是一个两行测试

同样,无论您以何种方式处理数据(在我的例子中,使用AJAX和post方法将数据传递到PHP页面,最终PHP页面将该文本的内容返回到JS脚本,该文本变成HTML,因此两行显示在一行上)

解决方案: 我确信它们是其他的方法,但正如我所建议的,我使用的方法确实是解析字符串并使用HTML标记对该字符串进行格式化

var输出\u text='';
对于(i=0;ioutput_text+=“你说的“消失”是什么意思?消失为空?消失为截断?什么URL编码(你没有做任何操作,需要依靠浏览器来更正错误)?什么格式?文本区域不支持任何标准格式。或者你指的是空白?@Ghost。我对问题进行了编辑,以精确说明我所说的“消失”是什么意思@Quentin@Ghost-我的意思是,例如\n(返回行\t\r等)我想说的是,PHP文件中的文本不是在两行上,而是只在一行上。所以我需要用行返回值来保存文本。我假设URL编码会删除行返回值,因为它不是URL的有效字符。@user18490-我知道。这就是答案所涵盖的内容。嗯\n不是空格?所以你建议我我自己用HTML标记替换行返回来对文本进行编码?并将其传递给其他人?还有其他方法可以推荐吗?正如我在回答中所说,在HTML中,所有空白字符(空格、新行、制表符等)都被视为“空格”。这是我在回答中提出的两个建议之一。另一个常见的方法是CSS。我感谢您的输入,但首先问题与URL编码有关,而不是HTML。其次,您建议更改方法,在此处使用get或post是不相关的。这里的问题是用于AJAX请求的内容类型。因此,您的建议是:stion基本上是自己对文本进行编码,但我仍然有兴趣听听其他人是如何做到这一点的。