通过XMLHttpRequest POST HTML

时间:2010-10-06 19:29:23

标签: javascript ajax post

我正在尝试通过XMLHttpRequest发布页面正文

var params = "type=search" + "&content="+encodeURIComponent(document.getElementsByTagName("body")[0].innerHTML);
xmlhttp.open("POST", "/service/p.aspx", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length); 
xmlhttp.send(params);

1 个答案:

答案 0 :(得分:3)

以下在Fi​​refox和IE8中对我来说很好用:

<html>
    <body>
        <script type="text/javascript">
// MAYBE FORGOT THIS PART?
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4)
    {
        document.write(xmlhttp.responseText);
    }
}

// THIS PART IS EXACTLY LIKE YOURS
var params = "type=search" + "&content="+encodeURIComponent(document.getElementsByTagName("body")[0].innerHTML);
xmlhttp.open("POST", "/service/p.aspx", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length); 
xmlhttp.send(params);
        </script>
    </body>
</html>

也许你只是忘了声明xmlhttp并为异步状态回调添加一个监听器?


另外,有关以跨浏览器方式获取XMLHttpRequest对象的详细信息,请参阅this SO question


以下是通过Firefox中的FireBug在POST请求中发送的内容:

type=search&content=%0A%20%20%20%20%20%20%20%20%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%2F%2F%20MAYBE%20FORGOT%20THIS%20PART%3F%0Avar%20xmlhttp%20%3D%20new%20XMLHttpRequest()%3B%0Axmlhttp.onreadystatechange%3Dfunction()%0A%7B%0A%20%20%20%20if%20(xmlhttp.readyState%3D%3D4)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20document.write(xmlhttp.responseText)%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20THIS%20PART%20IS%20EXACTLY%20LIKE%20YOURS%0Avar%20params%20%3D%20%22type%3Dsearch%22%20%2B%20%22%26content%3D%22%2BencodeURIComponent(document.getElementsByTagName(%22body%22)%5B0%5D.innerHTML)%3B%0Axmlhttp.open(%22POST%22%2C%20%22%2Fservice%2Fp.aspx%22%2C%20true)%3B%0Axmlhttp.setRequestHeader(%22Content-type%22%2C%20%22application%2Fx-www-form-urlencoded%22)%3B%0Axmlhttp.setRequestHeader(%22Content-length%22%2C%20params.length)%3B%20%0Axmlhttp.send(params)%3B%0A%20%20%20%20%20%20%20%20%3C%2Fscript%3E

所以你有type等于searchcontent,这是上面HTML的HTTP编码body,与编程完全一致。所以它似乎按预期工作......