使用 php 从 ajax 检索已发布的数据

Retrieving posted data from ajax using php

本文关键字:数据 检索 php ajax 使用      更新时间:2023-09-26

我从ajax调用中检索发布的数据时遇到问题,不确定出了什么问题。以下脚本的控制台输出显示了 ajax 调用之前的所有内容,但数据在连接器中不可用

   function updateOptions(data){
        console.log(data);
        console.log(data.id);
        console.log(data.action);
        var data = {id: data.id, action : data.action};
        console.log(data);
        $.ajax({
            type: 'POST',
            url: 'ajax.connector.php?action=updateOptions',
            data: JSON.stringify(data),
            cache: false,
            dataType  : "json",
            success: function(data, status) {
                if(data.status == 'success'){
                console.log('success');
                console.log(data);
                }else if(data.status == 'error'){
                    console.log('selects not updated');
                }
            },
            error: function(data){
                console.log('an error has occurred');
            },
        });
    }

因此,前 4 个控制台.log条目正确显示数据,第一个控制台.log在成功条件下正确显示。第二个,显示:

Object {status: "success", msg: "Category added successfully", id: null, action: null, post: Array[0]}

连接器[更像导演]

   case 'updateOptions':
        error_log('Running updateOptions function ' . print_r($_POST, TRUE), 0);
        $output = $sbb->updateOptions($_POST);
        break;

记录以下内容:

Running updateOptions function Array'n('n)'n,

如果我尝试回显 $_POST['action'] 或 $_POST['data'] 或其他内容到日志中,我会得到一个未定义的索引。

我强制 ajax 调用在 php case 函数调用的类中返回成功:

public function updateOptions($data){
        $output = array(
            'status' => 'success',
            'msg' => 'Category added successfully',
            'id' => $data['id'],
            'action' => $data['action'],
            'post' => $data,
        );
        return $output;
}

所以 ajax 调用本身确实有效,它是未传递的数据。

不知何故,我没有从 ajax 帖子中获取 [或正确检索] 数据。

这里有什么问题?

您正在发布 JSON,$_POST 填充了键=值对,不要将 JSON 与 application/x-www-form-urlencodedmultipart/form-data 混淆(这是 php 用来填充$_POST
的。要使用 jQuery.ajax 发送application/x-www-form-urlencoded数据,请将一个包含数据作为数据参数的对象传递

data: data, // removed JSON.stringify