我使用以下代码在javascript中通过xmlhttp发送字符串:
function SendPHP(str, callback) {
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
callback(xmlhttp.responseText); //invoke the callback
}
}
xmlhttp.open("GET", "testpost.php?q=" + encodeURIComponent(str), true);
xmlhttp.send();
}
和一些测试php:
$q = $_GET['q'];
echo $q;
这很好用,直到我开始发送一个更大的字符串,在这种情况下我得到了#34; HTTP / 1.1 414 Request-URI Too Long"错误。
经过一番研究后我发现我需要使用" POST"代替。所以我把它改成了:
xmlhttp.open("POST", "sendmail.php?q=" + str, true);
并且:
$q = $_POST['q'];
echo $q;
但是这在使用POST时不会回应任何内容。我该如何修复它,以便它像我使用GET时那样工作,但它可以处理大量数据?
编辑我现在尝试使用:
function testNewPHP(str){
xmlhttp = new XMLHttpRequest();
str = "q=" + encodeURIComponent(str);
alert (str);
xmlhttp.open("POST","testpost.php", true);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
alert (xmlhttp.responseText);
}
}
};
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(str);
}
答案 0 :(得分:5)
您不应该为您的href提供网址参数,而应该为send()
提供这些参数。另外,您应始终使用encodeURIComponent()
对参数进行编码(至少在您的请求使用Content-type
"application/x-www-form-urlencoded"
时)。
你的javascript函数:
function testNewPHP(){
var str = "This is test";
xmlhttp = new XMLHttpRequest();
str = "q=" + encodeURIComponent(str);
alert (str);
xmlhttp.open("POST","testpost.php", true);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
alert (xmlhttp.responseText);
}
}
};
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(str);
}
答案 1 :(得分:1)
javascript:
function testNewPHP(){
var str = "This is test";
xmlhttp = new XMLHttpRequest();
str = "q=" + encodeURIComponent(str);
alert (str);
xmlhttp.open("POST","testpost.php", true);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
alert (xmlhttp.responseText);
}
}
};
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(str);
}
主目录中的testpost.php:
<?php
var_dump($_POST);
输出:
array(1) {
["q"]=>
string(12) "This is test"
}