使用JQuery AJAX向PHP发送请求时出现未定义的索引问题

3
我很困惑。我发现很多帖子都有非常相似的问题,但要么没有得到回答,要么所有的回答都说应该可以正常工作,或者说它们已经起作用了。
我从jquery传递了一个键值对对象到php,并成功地将其弹出显示,但是如果我转到php页面,它会显示数据为null或未定义索引。
以下是我的jquery代码:
$('#test').click(function(){
    var obj= {
        'key': 'value',
    };
    $.ajax({
        url: "../folder/file.php",
        type: "POST", 
        data: {
            'obj' : obj
        },
        dataType: "JSON",
        success:function(data){
            alert(data);
        }

    });
}); 

以下是我的PHP代码。
$data = $_POST['obj']; // this is line 1
echo json_encode($data); // this is line 2

使用以上代码,当我点击测试按钮时,会弹出警示框 value。但是如果我在点击测试按钮后转到 PHP 页面,页面会显示 Notice: Undefined index: obj on line 1, and null on line 2.
如果我将 PHP 代码改为下面这样,当我转到 PHP 页面时会得到 there is nothing,但我的原始页面会弹出警示框 value
if(!empty($_POST['obj'])){
    $data = $_POST['obj'];
    echo json_encode($data); 
}else{
    echo 'there is nothing';
}  

为什么会这样?
我已经收到了我输入的值的提示。所以这意味着数据已经通过并返回。但是php页面却表示相反。

1
变量在脚本的不同执行之间不会持久存在,除了会话变量。 - Barmar
这意味着当我点击测试按钮时,数据存在,但当我加载php页面时,它消失了? - codenoob
你的代码看起来很不错。我也遇到了同样的问题,但是后来我在另一台服务器上进行了测试,一切都正常 :) 我认为这可能是浏览器缓存问题。 - csr-nontol
2个回答

3
当您发送AJAX请求时,它会在"data:"选项中发送"POST"参数,脚本可以在"$ _POST"中访问它。
当您直接从浏览器访问URL时,不会发送任何“POST”参数,因此“$ _POST”为空。
每次执行PHP脚本时,都会启动一个新的进程。之前设置的变量不会保留。例外是“$ _SESSION”,如果您在脚本中使用了“session_start()”。

好的,我的问题是一个更大问题的子问题。我最初尝试传递包含许多对象的对象。通过jQuery AJAX是否可能实现这一点?我看到jQuery文档说它只能处理普通对象。 - codenoob
1
可以的。它会对对象进行URL编码,PHP将自动解码。 - Barmar
我该如何在同一ajax请求期间打开我的php页面,以便我可以var_dump我的新对象并测试是否正常工作。 - codenoob
1
您可以使用开发者工具的网络选项卡。执行 AJAX 请求,然后选择其 URL,然后转到响应选项卡以查看脚本回显的所有内容。 - Barmar
AJAX能否在提交数据到同一页面时打开一个新窗口?我已经成功地将数据传递给我的PHP,使用mpdf生成PDF。现在我想提示下载PDF。如果我在PHP页面上,它将提示下载。我尝试使用success函数返回字符串形式的PDF,但由于某种原因它只是冻结了开发者工具。 - codenoob
AJAX只是向服务器发送请求并接收响应,响应后的处理取决于运行在其后的代码。我猜你需要学习一下AJAX的工作原理。 - Barmar

2

您可能不太了解HTTP的工作方式,HTTP是无状态的,如果您想存储一个值,请使用PHP session_start()函数,并将该值从post保存到$_SESSION中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接