Не может передать пустой указатель серверу с помощью Ajax jQuery. Значение, полученное в сервере, является строкой “пустой указатель”

Я преобразовываю 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
}
16
задан Bill the Lizard 9 August 2011 в 20:14
поделиться

1 ответ

Что бы вы ожидать? Вы отправляете эти значения как параметры POST, которые представляют собой простые текстовые строки. Если вам нужна безопасная передача типов, используйте какую-то кодировку, например JSON. (Это не то, что делает dataType - это относится к ответу сервера.)

12
ответ дан 30 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: