龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

Ajax POST方式发送请求服务器接收不到数据问题解决办法

时间:2012-12-29 08:41来源:未知 作者:admin 点击:
分享到:
文章总结了关于Ajax POST方式发送请求服务器接收不到数据问题解决办法 有需要学习的朋友可参考本文章。 直接看源码 代码如下 script language=javascript function setViewPoint() { var msg =; //用于接
文章总结了关于Ajax POST方式发送请求服务器接收不到数据问题解决办法 有需要学习的朋友可参考本文章。

直接看源码

 代码如下

<script language="javascript">
   function setViewPoint() {
    var msg =""; //用于接收返回数据
    //实例化Ajax
    var leeAjax = leeInitAjax();
    var webRoot = window.location;
    webRoot = webRoot.toString();
    var domain = webRoot.substring(7);
    var endD = domain.indexOf("/");
    domain = domain.substring(0,endD);
    //接收表单的URL地址
    var url = "http://"+domain+"/plus/leeGetViewForWay.php";
    //通过Post方式打开连接
    leeAjax.open("POST", url, true);
    //定义传输的文件HTTP头信息
    leeAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");
    //需要POST的值,把每个变量都通过&来联接
    //发送POST数据
    var postStr = "viewId='asdf'&id='asdfa'"
    leeAjax.send(postStr);//获取执行状态  
    leeAjax.onreadystatechange = function() {
     //如果执行状态成功,那么就把返回信息写到指定的层里
     if (leeAjax.readyState == 4 && leeAjax.status == 200) {
      msg = leeAjax.responseText;//获取的返回值
      alert(msg);
     }
    }
   } 
   function leeInitAjax() {
    var leeAjax=false;
    try{
     if( window.ActiveXObject ){
      for( var i = 5; i; i-- ){
       try{
        if( i == 2 ){
         leeAjax = new ActiveXObject( "Microsoft.XMLHTTP" );
        } else {
         leeAjax = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
        }     
        break;
       } catch(e) {
        leeAjax = false;
       }
      }
     } else if( window.XMLHttpRequest ) {
      leeAjax = new XMLHttpRequest();
      if (leeAjax.overrideMimeType) {
       leeAjax.overrideMimeType('text/xml');
      }
     }
    } catch(e) {
     leeAjax = false;
    } 
    return leeAjax;
   }
  </script>

php 代码如下:

 代码如下

<?php
$a = $_REQUEST ["viewId"].")___(".$_REQUEST["id"];
if($_POST ["viewId"]=="") $a .= "<br/>___";
echo $a;
?>


于是在构建发送数据时由字符串改成了JS对象,可是还是不行。只好查资料了。原来是要设置一下发送数据的编码类型的。代码如下:

 代码如下
var Myquery = Myinput();
 
xmlhttp.open("POST","post.php",true);
 
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
 
xmlhttp.onreadystatechange = byphp;

 
xmlhttp.send(Myquery);application/x-www-form-urlencoded编码类型是表单发送数据的默认编码类型,想不到在AJAX请求中要明确注明,这样添加了第三行的代码注明格式后果然就正确了,问题解决。如果通过JQUERY发送POST方式的AJAX请求就方便多了,不用添加这一行。再一次感受到了JQUERY的强大和便捷。


想用POST发送Ajax异步请求,就要把你的数据统一放在send()方法中发送,而不能是send(null)。

 代码如下
 Xml.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

这一句在GET方式中不要写,但是在POST方式中是必须的,由于你在POST方式中用了send(null),导致没有发送任何数据到index1.php,所以看不到这一句的效果。

 代码如下

 get('index1.php?c=1',a)"

get('index1.php?c=2',a)"

两个按钮发送的数据只有c这个参数不同,所以可以把index1.php和a都写在你这个get方法的内部,修改以后的get方法是这样的

 代码如下
function get(num)
{
data="index1.php?";
if(Xml){
 var obj=document.getElementById("a");
 Xml.open("POST",data);
 Xml.onreadystatechange=function()
 {
  if(Xml.readyState==4&&Xml.status==200){
   obj.innerHTML=Xml.responseText;
  }
 }
 Xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 var queryString="c="+num;
 Xml.send(queryString);
 }
}

当然

 代码如下

get('index1.php?c=1',a)"

get('index1.php?c=2',a)"

也要相应的改成

get(1);

get(2);

这样就可以成功地用POST方法向服务器异步请求数据了


精彩图集

赞助商链接