在php中获取ajax post数据

在php中获取ajax post数据,php,jquery,Php,Jquery,上面是我的AJAX帖子,下面是我的PHP: $.ajax({ url: '/gateway/', type: 'POST', data: {test : 'test'}, dataType: 'json', }).done(function(){ console.log('done'); }); 问题是,这无法工作(我得到一个空值)-为什么 我知道我的调用正在访问PHP代码,因为我可以转储任何旧字符串: var_dump($_POST['test']);

上面是我的AJAX帖子,下面是我的PHP:

$.ajax({
    url: '/gateway/',
    type: 'POST',
    data: {test : 'test'},
    dataType: 'json',
}).done(function(){
    console.log('done');
});
问题是,这无法工作(我得到一个空值)-为什么

我知道我的调用正在访问PHP代码,因为我可以转储任何旧字符串:

var_dump($_POST['test']);
die();

我哪里出错了?

只要删除这个
数据类型:“json”
。您的
$\u POST['test']
是字符串值,而不是JSON字符串。

您正在测试的POST值不是JSON,而是字符串

移除

var_dump('hello');
die();
它应该可以工作。

或者更改PHP代码

dataType: 'json',

当您在AJAX请求中设置
数据类型:“json”
时,这意味着预期的响应应该被解析为json(而不是像其他人所说的那样,传出的帖子)

下面是一个精简的复制粘贴示例,供您构建。希望能有帮助

header('Content-Type: application/json');
exit(json_encode(array('data' => 'Bla bla bla')));

jQuery(文档).ready(函数(){
var ajax=$.ajax({
网址:“./”,
类型:“POST”,
数据:{test:'test'},
数据类型:“json”
});
完成(函数(数据){

$(“#result”).html(data.ABC);/*我不完全确定这是否是问题所在,但
.done
已被弃用。此外,正如其他人提到的,您正在从服务器请求json,而没有收到json

您的代码应该如下所示

<?php 
//is it POST
if($_SERVER['REQUEST_METHOD'] == 'POST'){

    // set var
    $test = isset($_POST['test']) ? $_POST['test'] : null;

    //do some logic - skip that bit ;p

    //was the request from AJAX, ok send back json
    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

        //always a good idea
        header('Content-Type: application/json');

        //json encode, notice the ABC, then look at the jQuery below
        die(json_encode(
            array('ABC' => 'From Response: '.$test)
        ));
    }
}
?>

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script>
jQuery(document).ready(function(){
    var ajax = $.ajax({
        url: "./",
        type: "POST",
        data: {test : 'test'},
        dataType: "json"
    });
    ajax.done(function(data) {
        $("#result").html(data.ABC); /* << See data is an object */
    });
    ajax.fail(function(xhr, status, error) {
        $("#result").html(xhr.responseText);
    });
});
</script>

<span id="result"></span>

我想向你推荐我的代码。请检查以下几点

  • 检查您提供的url的位置。如果它在父目录中,那么您可以使用
    。/
    访问它,最重要的是提供文件的扩展名。例如“gateway.php”
  • 并编写成功和失败函数。它可以更好地了解正在发生的事情

    $.ajax({
        url: '/gateway/',
        type: 'POST',
        data: {test : 'test'},
        success: function () {console.log('done');}
    });
    
  • 如果有任何错误,请发表评论


    希望有帮助:)。如果有,请不要忘记将其绿色化:p

    尝试
    var\u dump($\u POST);
    您看到了什么吗?打印$\u POST数组时会发生什么?打印时它只是空白。请尝试使用-data:{test':'test'}问题似乎与“数据”有关,我想数据是正确的……您是否能够在firebug控制台的参数下看到“测试”您的问题可能超出了问题中提供的代码范围。请确保您发送的请求带有准确的
    url
        $.ajax({
        type:'POST', 
        url:'gateway',  
        data:{test:'test'},
    
        success: function(data){
            if(data)
            {
                    alert(data);
            }
        }, 
        failure: function(){
            alert(failed);
        }
    
    }) ;