2011-01-25 39 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);