【问题标题】:Why can't I get my JSON Data posted using AJAX in my PHP file?为什么我无法在我的 PHP 文件中使用 AJAX 发布我的 JSON 数据?
【发布时间】:2012-01-07 07:10:08
【问题描述】:

我有一个 AJAX 脚本,可以在我的一个 PHP 文件中发布数据:

     var _lname = $('#ptLastName').val();
    var _fname = $('#ptFirstName').val();
    var _mname = $('#ptMiddleName').val();
$.ajax({
                type: "POST",
                url: ".././CheckPerson.php",
                data: "{'lastName':'" + _lname + "','firstName':'" + _fname + "','middleName':'" + _mname + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {
                    var res = response.d;
                    if (res == true) {
                        jAlert('Person Name already exists!', 'Error');
                        return;
                    }

它工作正常,我可以看到在 Firebug 控制台中发布的 JSON 数据。问题出在这个 PHP 代码上:

$firstname = json_decode($_POST['firstName']);
$lastname = json_decode($_POST['lastName']);
$middlename = json_decode($_POST['middleName']);
$response = array();

上面的 PHP 代码似乎无法将 'firstName''lastName''middleName' 识别为已发布的 JSON 参数,并为所有已发布的参数返回类似的 Undefined index: firstName in C:...

我还尝试使用$data = $_POST['data']$_REQUEST['data'] 获取所有JSON 参数并使用json_decode($data); 对其进行解码,但没有成功。

我还为帖子$.post('.././CheckPerson.php', {data: dataString}, function(res){ }); 使用了 AJAX 缩短代码,它适用于我的 PHP 文件,我的 PHP 文件现在可以读取 lastNamefirstNamemiddleName,但我认为它是不是 JSON 数据,而只是文本数据,因为 firebug 无法将其读取为 JSON 数据。现在,我很困惑我的 PHP 文件将如何读取 JSON 数据参数。你们对此有什么建议吗?

【问题讨论】:

    标签: php jquery ajax json


    【解决方案1】:

    问题在于dataType: "json" 并不意味着您正在发布 json,而是您希望从服务器接收 json 数据作为您的请求的结果。您可以将您的帖子数据更改为:

    data: {myPostData : "{'lastName':'" + _lname + "','firstName':'" + _fname + "','middleName':'" + _mname + "'}"}
    

    然后在你的服务器上解析它

    $myPostData = json_decode($_POST['myPostData']);
    $firstname = $myPostData["firstName"];
    $lastname = $myPostData["lastName"];
    $middlename = $myPostData["middleName"];
    

    【讨论】:

      【解决方案2】:

      一个问题-您在 json 中使用单引号。您应该使用双引号(根据规范)。

      {"lastName":"Smith", "firstName":"Joe"}
      
      instead of 
      
      {'lastName':'Smith', 'firstName':'Joe'}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-27
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多