如何使用POST将字符串发送到php

时间:2014-04-11 20:04:28

标签: javascript ajax

我使用以下代码在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);

}

2 个答案:

答案 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"
}