Подтвердить что ты не робот

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

Я конвертирую приложение 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
}
4b9b3361

Ответ 1

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

Ответ 2

Вы можете использовать undefined вместо null.

data: {
  valueTrue : true,
  valueFalse: false,
  valueNull : undefined
}

Ответ 4

Я ожидаю, что он отправит параметры запроса как valueNull =, а не valueNull = null, что является моим опытом.

Если вы выполняете REST с JSON, вам все равно нужно отправить параметры запроса для GETS, и вы не должны преобразовывать все свои GETS в POSTS, чтобы обойти эту проблему.