Ajax POST方式發送請求伺服器接收不到資料問題解決辦法

來源:互聯網
上載者:User

直接看源碼

 代碼如下 複製代碼

<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方法向伺服器非同步請求資料了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.