如何使用xmlhttprequest发送原始文本?

时间:2013-04-06 06:35:14

标签: javascript ajax xmlhttprequest

我正在尝试使用ajax将textarea字段的文本发送到PHP文件,该文本包含HTML字符,不应编码。
使用FormData它可以很好地工作,但在9及更早的版本中它不受支持!我设法将string设置为requestHeadertext/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中这样做的另一种方法是什么?

3 个答案:

答案 0 :(得分:1)

是的,可以通过修改headerRequestdata来完成:

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));