我的AJAX post变量没有进入我的PHP

时间:2014-06-20 09:09:38

标签: javascript php ajax json

我已经制作了一个AJAX函数,它确实有效,但是我无法用PHP获取变量。这是我的代码:

// Validate signup
function validateSignup(){
    // Get values
    var username = document.getElementById("pm_username").value;
    var email = document.getElementById("pm_email").value;
    var password = document.getElementById("pm_password").value;
    // Make new object
    var data = {};
    // Make array from object
    data['data'] = [];

    // If values are not empty...
    if(username !== "" || email !== "" || password !== ""){
        data['data'].push(email, username, password);
        // Convert data to JSON string and make new XMLHttpRequest
        var json = JSON.stringify(data['data']), xhr = new XMLHttpRequest();

        // Page to open
        xhr.open("POST", "ajax/signup.php", true);
        // Set header to POST
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        // Send values
        xhr.send(json);
        console.log(json);

        xhr.onload = function(){
            console.log(xhr.responseText);
        }

    }else{ // ...or throw new exception
        throw("Some thing was not filled in!");
    }
}

它有效,但我不知道如何在我的PHP中获取JSON变量。这是我的PHP代码(简单):

<?php

$json = $_POST['json'];
echo $json;
echo "Test";

?>

它有效,因为“Test”回显正在控制台中显示。但是,我收到了回复:

<br />
<b>Notice</b>:  Undefined index: json in <b>G:\usbwebserver\root\pokemonisle\ajax\signup.php</b> on line <b>3</b><br />
Test 

这意味着$ _POST ['JSON']未被识别。我没有使用jQuery,因为我想了解XMLHttpRequests的工作原理。

3 个答案:

答案 0 :(得分:0)

您的POST数组不包含名为json的字段。

尝试以下方法:

<?php 
var_dump($_POST);
?>

检查您要获得的字段。

为防止出现错误,您可以尝试:

<?php
if(isset($_POST['json']))
{
    $json = $_POST['json'];
    echo $json;
}
?>

同样可以使用其他变量:

<?php
if(isset($_POST['username']))
{
    $username = $_POST['username'];
    echo $username;
}
?>

答案 1 :(得分:0)

您不会发送名为&#39; json&#39;的帖子数据,因此您无法在服务器端获取该数据。

尝试将数据对象字符串化为

var json = "json="+JSON.stringify(data['data']);

并将其作为

$json = $_POST['json'];

您可以查看此链接。 Send POST data using XMLHttpRequest

答案 2 :(得分:0)

  

当你生成数组的字符串   &#34; JSON.stringify(数据[&#39;数据&#39;])&#34;它

     

例如此

的输出
var name ="abc";
var surname ="xyz";
var data ={};
data['data']=[];
data['data'].push(name, surname);
var json = JSON.stringify(data);
console.log(json); 

  

{&#34;数据&#34;:[&#34; abc&#34;,&#34; xyz&#34;]}

$ _POST [&#39; json&#39;]应该给你什么。???

$ _POST [&#39; name&#39;](例如,在表单中)为您提供字段用户名的值。