为什么我不能在我的PHP文件中使用AJAX发布我的JSON数据?

我有一个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);对其进行解码json_decode($data); 但没有奏效。

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

问题是dataType: "json"并不意味着您发布了json,但是您希望在请求时从服务器接收json数据。 您可以将post数据更改为:

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

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

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

一个问题 – 你正在为你的json使用单引号。 你应该使用双引号(根据规范)。

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