我正在尝试使用ajax将textarea
字段的文本发送到PHP文件,该文本包含HTML字符,不应编码。
使用FormData
它可以很好地工作,但在9及更早的版本中它不受支持!我设法将string
设置为requestHeader
或text/plain;charset=UTF-8;
,但尝试将数据作为multipart/form-data
发送,但它无效!
我正在使用的代码是:
var string = '<td clas="tdClass">some text<?php echo $contents; ?></td>';
var data = new FormData();
data.append("data" , string);
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
xhr.open( 'post', '/path/to/php', true );
xhr.send(data);
在IE 9中这样做的另一种方法是什么?
答案 0 :(得分:1)
是的,可以通过修改headerRequest
和data
来完成:
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
if(typeof(FormData) == 'undefined'){
var boundary = '---------------------------' + (new Date).getTime(),//boundary is used to specify the encapsulation boundary of a parameter
data = "--" + boundary + "\r\n";
data += 'Content-Disposition: form-data; name="data"\r\n\r\n';//here we specify the name of the parameter name (data) sent to the server which can be retrieved by $_POST['data']
data += string + "\r\n";
data += "--" + boundary + "--\r\n";
xhr.open( 'post', 'writeCode.php', true );
xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
}else{
var data = new FormData();
data.append("data", string);
xhr.open( 'post', 'writeCode.php', true );
}
xhr.send(data);
答案 1 :(得分:1)
如果FormData
正常使用,那么在您无法使用的情况下,您实际需要做的就是用以下内容替换最后一行:
xhr.send("data="+encodeURIcomponent(string));
我认为其他回答者对你要求文本&#34;没有编码&#34;感到困惑。表单数据通常被编码为通过HTTP发送,但是当它到达服务器时由PHP 解码,完全透明地:你得到完全原始文本返回< / em>,无论它包含哪些特殊字符。 (假设您将PHP字符串解释为UTF-8)。
因此,按照您的示例,如果您的PHP文件包含:
$data = $_POST['data'];
然后PHP $ data变量的内容将是字符串&#39; <td clas="tdClass">some text<?php echo $contents; ?></td>
&#39;。这与您使用FormData
方法相同。
答案 2 :(得分:0)
因为,毕竟它看起来很简单。这是一些更多的样本。
只需发布随机文字
// just text
var dest = "http://requestb.in/qwb9y3qw";
var xhr = new XMLHttpRequest();
xhr.open("POST", dest, true);
var myText = "foobar";
xhr.send(myText);
发布JSON对象
// post json
var dest = "http://requestb.in/1908jrv1";
var xhr = new XMLHttpRequest();
xhr.open("POST", dest, true);
var myObject = {};
myObject.prop1 = "foo";
myObject.prop2 = "bar";
xhr.send(JSON.stringify(myObject));