#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;