【问题标题】:AJAX post method: Variables are not passed to target phpAJAX post方法:变量不传递给目标php
【发布时间】:2011-06-15 11:38:41
【问题描述】:

我正在尝试向 php.ini 发送两条信息。 1-) 帐篷 = zuzu 2-) zart = gagi

target php 只是回显我发送的内容,以便我可以检查它是否正常工作。这是javascript:

    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

注意:未定义索引:第 16 行 C:\wamp\www\mysite\oxifa/oxifat.php 中的帐篷

注意:未定义索引:第 17 行 C:\wamp\www\mysite\oxifa/oxifat.php 中的 zart

注意:未定义索引:第 18 行 C:\wamp\www\mysite\oxifa/oxifat.php 中的帐篷

注意:未定义索引:第 19 行 C:\wamp\www\mysite\oxifa/oxifat.php 中的 zart

符号2

关于“setRequestHeader”的三行处于注释状态。如果我包括它们,我什至没有得到sign1。没有反应。我从中得出的结论是一切正常,但我似乎不明白如何使用 post 方法将数据传递给 php。我该怎么做呢?我已经阅读了网络上的所有内容。我只是不知道“setRequestHeader”是干什么用的。还有一件事:如果我把 ?tent=zuzu&zart=gagi 放在目标 URL 的末尾,$_REQUEST 就可以了。但那是 GET 而不是我想要做的。 $_POST 的交易是什么?

【问题讨论】:

  • 终于找到了问题所在。 xmlHttp.setRequestHeader 中的 H 是大写字母,它们一直在破坏我的代码。现在使它们变小并且可以正常工作。从来没有想过它会区分大小写......

标签: php javascript ajax xhtml post


【解决方案1】:

请您尝试调用以下代码

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);

【讨论】:

  • 我放了两个分别拍摄 getXMLObject() 和 doRequest 的链接。我替换了“your_script.php?”和参数。我用我希望出现响应的地方替换了回调,然后我把 print_r($_POST);在我的 php 文件中。这就是我得到的:数组()
  • xmlhttp.send();我把所有的变量都放在里面。我没有任何其他表格或任何东西要填写 $_POST。据我从搜索中了解到 xmlhttp.send() 足以将东西传递给 php 但在这种情况下 $_POST 原来是空的。
【解决方案2】:

您使用 GET 的 URL 传递参数,而不是 POST 的正确方式。

见:http://www.openjs.com/articles/ajax_xmlhttp_using_post.php

尝试在此处取消请求中的参数:

xmlhttp.open("POST","/mysite/oxifa/oxifat.php?tent=zuzu&zart=gagi",true);

然后取消注释这些:

//xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //xmlhttp.setRequestHeader("内容长度", mesparam.length); //xmlHttp.setRequestHeader("连接", "关闭");

【讨论】:

  • 我看过那个链接。它无处不在。我不使用 URL 传递参数。我将 ?tent=zuzu&zart=gagi 放在 URL 的末尾,只是为了尝试找出问题所在。当我这样做时,$_REQUEST 有效。我在这里粘贴时忘记删除它。对此感到抱歉。
【解决方案3】:

您需要取消注释这 2 行,否则您的 php $_POST 将无法获取它。此外,正如stonemonkey77 所回答的,您还在获取网址中传递参数。

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

【讨论】:

  • 当我取消注释这些行时,我什么也得不到。看起来当这些行打开时 Javascript 没有运行。我相信问题与这些线路有关。我使用了一些错误的变量等。但是我又一次不明白“setRequestHeader”的事情。
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2011-02-23
  • 2012-12-21
  • 1970-01-01
  • 2022-01-07
  • 2018-12-15
  • 1970-01-01
相关资源
最近更新 更多