У меня есть сценарий 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; }
Он отлично работает, и я могу видеть данные JSON, размещенные в консоли Firebug. Проблема заключается в этом 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);
но не работает.
Я также использовал сокращенный код AJAX для post $.post('.././CheckPerson.php', {data: dataString}, function(res){ });
, он отлично работает с моим файлом PHP, и мой PHP-файл теперь может читать lastName
, firstName
и middleName
, но я думаю, что это не данные JSON, а только текстовые данные, потому что firebug не может читать его как данные JSON. Теперь, я смущен, как мой PHP-файл будет читать параметры данных JSON. У вас есть какие-то предложения по этому поводу?
Проблема в том, что 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"];
Одна проблема: вы используете одиночные кавычки для своего json. Вы должны использовать двойные кавычки (согласно спецификации).
{"lastName":"Smith", "firstName":"Joe"} instead of {'lastName':'Smith', 'firstName':'Joe'}