Удалить нулевое значение в javascript для записи $.ajax

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть

 var pageData = {
query: null,
pageNumber: 0,
pageSize: 30};
  

Когда я создаю ajax, получаю:

 $.ajax({
    type: 'GET',
    url: '/Ajax/GetSuggestions',
    data: pageData,
    success: function (response) {}
  

Запрос отображается в firebug: http://localhost:31198/Ajax/GetSuggestions?query=nullamp;pageNumber=1amp;pageSize=30

На стороне сервера (ASP.ЧИСТЫЙ MVC3), я получил запрос = null в строке, а не нулевые данные (то, что мне нужно). Как я могу это исправить, не используя метод удаления javascript для удаления нулевого значения?

Комментарии:

1. Какую технологию вы используете на стороне сервера (например, PHP? ASP.NET MVC?)?

2. почему вы не хотите использовать delete для удаления нулевого значения?

Ответ №1:

Если вы хотите, чтобы ваш URL-адрес выглядел следующим образом:

 http://localhost:31198/Ajax/GetSuggestions?query=amp;pageNumber=1amp;pageSize=30 
  

Затем вы должны присвоить свойству запроса значение "" (пустая строка).


Если вы хотите, чтобы ваш URL-адрес выглядел следующим образом:

 http://localhost:31198/Ajax/GetSuggestions?amp;pageNumber=1amp;pageSize=30 
  

Затем вам нужно удалить, чтобы удалить query свойство из объекта PageData, либо не помещая его туда в первую очередь, либо используя delete pageData.query для его удаления.

Ответ №2:

Существует несколько способов отправки данных «по проводам». Стандартным для отправки данных формы на сервер является кодировка url. Второй способ — отправить объект JSON. (Деталь передачи заключается в том, что JSON будет закодирован в URL. Но это только детали передачи.) Третий способ — использовать XML.

Как показывает @jfriend00 в своем ответе, существует множество хакерских способов отправки «нулевого» значения через кодировку url. Вы должны использовать тот, который лучше всего поддерживает ваш серверный стек.

Re: почему строка «null» Происходит то, что значение null в Javascript необходимо преобразовать в значение, которое может быть отправлено через HTTP («по проводам»). Способ сделать это по умолчанию — использовать строку null. Проблема в том, что схема кодирования URL отправляет данные только в виде строк. Таким образом, у него нет автоматического способа отправить значение null вместо строки null. Обычный обходной путь — это пустая строка «».

Но это также может вызвать проблему на стороне вашего сервера, поскольку строка «» не равна значению null в большинстве компьютерных языков. Поэтому вам нужно будет выполнить соответствующие сравнения или преобразования. Например, «» == false в вашем серверном программном обеспечении?

Использование JSON для кодирования данных — это другой метод.

JSON напрямую поддерживает нулевое значение. Предполагается, что оно передается как null . Смотрите спецификацию JSON (не так очевидно, найдите на странице значение null) и документы IBM

Способ получения нулевых данных в JSON — это простое слово null . Если вы используете JSON, обратите внимание, что вы не получаете строку null, вы получаете ключевое слово JSON null . Ваш приемник / декодер JSON должен знать разницу. Если этого не происходит, значит, он неисправен.

Комментарии:

1. Этот ответ совершенно неверен — он не использует JSON! Параметры кодируются по URL, а не в формате JSON.

2. Упс, я очень быстро прочитал вопрос. Теперь я обновил, чтобы лучше охватить параметры и основные проблемы.

Ответ №3:

Когда строка запроса создается в jQuery, она использует каждое свойство data объекта, которое она может найти.

Все, что вам нужно сделать, чтобы удалить свойство, — это delete само свойство:

 delete pageData.query;