Я конвертирую приложение javascript/php/ajax для использования jQuery для обеспечения совместимости с браузерами, отличными от Firefox.
У меня возникли проблемы с передачей истинных, ложных и нулевых значений с помощью функции jQuery ajax.
Код Javascript:
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data:
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
}
);
PHP-код:
var_dump($_POST);
Выход сервера:
array(3) {
["valueTrue"]=>
string(4) "true"
["valueFalse"]=>
string(5) "false"
["valueNull"]=>
string(4) "null"
}
Проблема заключается в том, что значения null, true и false преобразуются в строки.
Используемый в настоящее время Javascript AJAX-код корректно передает null, true и false, но работает только в Firefox.
Кто-нибудь знает, как решить эту проблему с помощью jQuery?
Вот какой рабочий код (не используя jQuery) для сравнения с приведенным выше нерабочим кодом.
Код Javascript:
ajaxPort.send
(
<server_url>,
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
);
PHP-код:
var_dump(json_decode(file_get_contents('php://input'), true));
Выход сервера:
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
Обратите внимание, что правильные значения null, true и false.
Обратите также внимание на то, что во втором методе массив $_POST не используется в PHP-коде. Я думаю, что это ключ к этой проблеме, но я не могу найти способ реплицировать это поведение с помощью jQuery.
Этот раздел был добавлен после того, как был принят ответ ниже.
Вот исправленная версия исходного кода.
Код Javascript:
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data : JSON.stringify
(
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
)
}
);
PHP-код:
var_dump(json_decode(file_get_contents('php://input'), true));
Выход сервера:
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}