Я преобразовываю javascript/php/ajax приложение для использования jQuery для обеспечения совместимости с браузерами кроме Firefox.
Я испытываю затруднения при передаче истинных, ложных, и нулевых значений с помощью функции ajax jQuery.
Код 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"
}
Проблема состоит в том, что пустые, истинные, и ложные значения преобразовываются в строки.
Ajax JavaScript кодирует использующийся в настоящее время передачи, пустые, верные, и ложные правильно, но только работает в 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
}
Обратите внимание, что пустые, истинные, и ложные значения правильно получены.
Обратите внимание также, что во втором методе $ _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
}
Что бы вы ожидать? Вы отправляете эти значения как параметры POST, которые представляют собой простые текстовые строки. Если вам нужна безопасная передача типов, используйте какую-то кодировку, например JSON. (Это не то, что делает dataType
- это относится к ответу сервера.)