【问题标题】:Why isn't my Javascript Ajax call posting values to my PHP script?为什么我的 Javascript Ajax 调用不向我的 PHP 脚本发布值?
【发布时间】:2014-02-08 00:53:37
【问题描述】:

这是一个非常奇怪的问题。 Javascript IS 调用 PHP 脚本,PHP 脚本 IS 返回“某物”(它返回 array ())。问题是,当我尝试通过$_POST['ID'] 获取发布数据的值时,它基本上说没有发布值,即使sendData 确实包含ID 的值。 sendData的完整字符串(通过alert(sendData)获得)如下:

ID='1'&Invoice=''&FirstName=''&LastName=''&Description=''&Testimonial=''&ScreenRoom='false'&GlassWindow='true'

Javascript 文件: admin.js

function saveChanges() {
    var sendData='ID=\'' + document.getElementById("ID").value + '\'';
    sendData+='&Invoice=\'' + document.getElementById("Invoice").value + '\'';
    sendData+='&FirstName=\'' + document.getElementById("FirstName").value + '\'';
    sendData+='&LastName=\'' + document.getElementById("LastName").value + '\'';
    sendData+='&Description=\'' + document.getElementById("Description").value + '\'';
    sendData+='&Testimonial=\'' + document.getElementById("Testimonial").value + '\'';
    sendData+='&ScreenRoom=\'' + document.getElementById("ScreenRoom").checked + '\'';
    sendData+='&GlassWindow=\'' + document.getElementById("GlassWindow").checked + '\'';
    var req = new XMLHttpRequest();
    req.open("POST","scripts/saveChanges.php",true);  //true indicates ASYNCHRONOUS
    req.send(sendData);
    req.onreadystatechange = function() {
      //Is request finished? Does the requested page exist?
        if(req.readyState==4 && req.status==200) {   
            //Your HTML arrives here
            alert(sendData);
            alert(req.responseText);
        }
    }
}

PHP 文件(正在发布到): saveChanges.php(位于 /scripts/)

<?php
session_start();
if (!isset($_SESSION['group']) || $_SESSION['group'] != 'admin') {
    die ('You do not have permission to access this page!');
}
print_r($_POST);

$ID=$_POST['ID'];
$Invoice=$_POST['Invoice'];
$FirstName=$_POST['FirstName'];
$LastName=$_POST['LastName'];
$Description=$_POST['Description'];
$Testimonial=$_POST['Testimonial'];
$Date=$_POST['Date'];
$GlassWindow=$_POST['GlassWindow'];
$ScreenRoom=$_POST['ScreenRoom'];


?>

我通常只是在绝望的状态下来到这里,现在我已经花了大约 3 个小时来试图弄清楚这一点,我认为自己相当绝望。任何帮助将不胜感激,如果您需要更多信息,请询问。

【问题讨论】:

  • 所以对于一个:array() 的输出你也有,当收到 nothing 时......看!啊,你说saveChanges.php (located in /scripts/),当你从javascript调用scripts/saveChanges.php时,它是相对于你所在的目录,你在console中是否有任何错误?也许你试试/scripts/saveChanges.php
  • 它正在正确连接到 php 脚本,因为我在 saveChanges.php 的开头添加了 echo 'test' 并且它已在警报中返回。
  • 我很困惑,在哪个警报中? alert(req.responseText); 到底说了什么?您是否从 @Musa 进行了更改?
  • 是的,我遵循了@Musa 建议的更改并且它们起作用了。感谢大家的帮助。

标签: javascript php ajax post http-post


【解决方案1】:

您必须为 php 设置内容类型才能读取变量

req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

从发布的数据中删除引号并正确编码

var sendData='ID=' + encodeURIComponent(document.getElementById("ID").value);
sendData+='&Invoice=' + encodeURIComponent(document.getElementById("Invoice").value);
sendData+='&FirstName=' + encodeURIComponent(document.getElementById("FirstName").value);
sendData+='&LastName=' + encodeURIComponent(document.getElementById("LastName").value);
sendData+='&Description=' + encodeURIComponent(document.getElementById("Description").value);
sendData+='&Testimonial=' + encodeURIComponent(document.getElementById("Testimonial").value);
sendData+='&ScreenRoom=' + document.getElementById("ScreenRoom").checked;
sendData+='&GlassWindow=' + document.getElementById("GlassWindow").checked;

在发送请求之前设置就绪状态监听器

req.onreadystatechange = function() {
  //Is request finished? Does the requested page exist?
    if(req.readyState==4 && req.status==200) {   
        //Your HTML arrives here
        alert(sendData);
        alert(req.responseText);
    }
}
req.send(sendData);

【讨论】:

  • 我按照您的说法更改了我的代码,并将req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 放在我的就绪状态侦听器之前。令我惊讶的是,就绪状态侦听器内部的两个警报甚至不再发生。我开始认为这可能是我网站的特定问题。你还有其他想法吗?我访问了被调用的网站 (bellasaluminum.com/scripts/saveChanges.php) 并且所有权限/.htaccess 都已正确设置。
  • 我将 setRequestHeader 移到就绪状态侦听器下方,它工作正常。谢谢!
【解决方案2】:

尝试设置HTTP头:

req.setRequestHeader("Content-type","application/x-www-form-urlencoded");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2011-11-15
    相关资源
    最近更新 更多