2011-01-25 100 views
0

我想發送兩個信息到一個PHP。我們發送的內容只是迴應我發送的內容,以便檢查它是否正常工作。這是JavaScript:AJAX發佈方法:變量不傳遞到目標php

function boka() 
{ 
var mesparam = "tent=zuzu&zart=gagi"; 
if (window.XMLHttpRequest){xmlhttp=new XMLHttpRequest();} 
else {xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");} 
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) {document.getElementById("response").innerHTML=xmlhttp.responseText;} } 
xmlhttp.open("POST","/mysite/oxifa/oxifat.php?tent=zuzu&zart=gagi",true); 
//xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
//xmlhttp.setRequestHeader("Content-length", mesparam.length); 
//xmlHttp.setRequestHeader("Connection", "close"); 
xmlhttp.send(mesparam); 
} 

這是oxifat.php是臨危請求:

<?php 
echo " sign1 <br>"; 


echo next($_POST); 
echo next($_POST); 
echo next($_POST); 
echo next($_POST); 
echo next($_POST); 
echo $_POST['tent']; 
echo $_POST['zart']; 
echo $_REQUEST['tent']; 
echo $_REQUEST['zart']; 

echo "<br> sign2"; 

?> 

正如你可以看到我已經包括了各種各樣的事情來呼應出無論是在$ _ POST,但顯然裏面空空如也,這是我得到的迴應:

SIGN1

注意:未定義指數:帳篷在C:\ WAMP \ WWW \ mysite的\ oxifa/oxifat.php上線16

說明:未定義指數:zart在C:\瓦帕\ WWW \ mysite的\ oxifa/oxifat.php線路17

說明:未定義指數:帳篷C:\瓦帕\ WWW \ mysite的\ oxifa/oxifat.php上線18

說明:未定義指數:zart在C:\瓦帕\ WWW \ mysite的\ oxifa/oxifat.php上線19

SIGN2

三行有關 「setRequestHeader」處於評論狀態。如果我包括他們,我甚至不會收到sign1。沒有反應。我從中得出的結論是一切正常,但我似乎並不瞭解如何使用post方法將數據傳遞給php。我該怎麼做呢?我已經閱讀了網上的所有內容。我只是不知道「setRequestHeader」是什麼。還有一件事:如果我在目標URL的末尾放置zart = gagi,則可以使用$ _REQUEST。但那是GET而不是我想要做的。什麼是$ _POST的交易?

+0

最後發現問題。 H的xmlHttp.setRequestHeader是大寫字母,它們一直在破壞我的代碼。現在讓他們變得小巧而且有用。沒想到它可能區分大小寫... – hass 2011-01-26 01:17:45

回答

0

可否請你嘗試調用下面的代碼

function getXMLObject() { 
    var xmlHttp = false; 
    try { 
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");// For Old Microsoft Browsers 
    } 
    catch (e) { 
    try { 
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");// For Microsoft IE 6.0+ 
    } 
    catch (e2) { 
     xmlHttp = false;// No Browser accepts the XMLHTTP Object then false 
    } 
    } 
    if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { 
    xmlHttp = new XMLHttpRequest();//For Mozilla, Opera Browsers 
    } 
    return xmlHttp;// Mandatory Statement returning the ajax object created 
} 

var xmlhttp = new getXMLObject();//xmlhttp holds the ajax object 

//use this method for asynchronous communication 
function doRequest(params, callback) { 
    if (xmlhttp) { 
    xmlhttp.open("POST", "your_script.php?" + params, true); 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4) { 
     if (xmlhttp.status == 200) { 
      callback(xmlhttp.responseText); 
     } 
     else { 
      alert("Error retrieving information (status = " + xmlhttp.status + ")\n" + response); 
     } 
     } 
    }; 
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    xmlhttp.send(null); 
    } 
} 

,並在你的PHP腳本的第一件事關寫

print_r($_POST); 
+0

我放了兩個分別拍攝getXMLObject()和doRequest的鏈接。我替換了「your_script.php?」和params。我用我希望響應出現的位置替換回調函數,並將print_r($ _ POST);在我的PHP文件。這是我得到的:Array() – hass 2011-01-25 21:59:17

+0

所以它是空的.. – 2011-01-25 22:01:35

+0

xmlhttp.send();我把所有的變量放在裏面。我沒有任何其他形式或任何填充$ _POST。據我所知,從我的搜索xmlhttp.send()足以將事情傳遞給PHP,但在這種情況下$ _POST結果是空的。 – hass 2011-01-25 22:45:20

0

你傳入的參數與它是GET的URL,而不是POST的正確方法。

參見:http://www.openjs.com/articles/ajax_xmlhttp_using_post.php

嘗試採取的參數關在這裏的要求:

xmlhttp.open( 「POST」,「/ mysite的/ oxifa/oxifat.php10噸=祖祖& zart = gagi 「,真正);

然後在取消這些:

//xmlHttp.setRequestHeader("Content-type」, 「應用程序/ x WWW的形式進行了urlencoded」); //xmlhttp.setRequestHeader("Content-length「,mesparam.length); //xmlHttp.setRequestHeader("Connection「,」close「);

0

你需要取消註釋這兩行,否則你的php $_POST不會去撿起它。另外,正如stonemonkey77所回答的那樣,您也正在傳遞get url中的參數。

xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.setRequestHeader("Content-length", mesparam.length);