Используя jQuery для создания POST, как правильно предоставить параметр 'данных'?

Я хотел бы выполнить ajax вызов как POST, он собирается перейти к моему сервлету. Я хочу отправить параметризованные данные, как следующее:

var mydata = 'param0=some_text&param1=some_more_text';

Я предоставляю это как параметр 'данных' моего jQuery ajax () вызов. Таким образом, это должно быть вставлено в тело POST, правильно? (Я имею в виду, не добавленный к моему 'mysite/save' URL?):

$.ajax({
    url: 'mysite/save',
    type: 'POST',
    data: mydata
});

это, кажется, работает правильно. В моем сервлете я просто вывожу все полученные параметры, и я вижу, что они все проникают приятно:

private void printParams(HttpServletRequest req) {
    Enumeration paramNames = req.getParameterNames();
    while (paramNames.hasMoreElements()) { 
        // print each param key/val here.
    }
}

также, я должен URL кодировать мою строку данных вручную перед использованием, правильно? Как:

var mydata = 'param0=' + urlencode('hi there!');
mydata += '&param1=' + urlencode('blah blah');
mydata += '%param2=' + urlencode('we get it');

Спасибо!

20
задан user246114 17 June 2010 в 22:15
поделиться

4 ответа

Более простой способ - предоставить свойство data в виде объекта, например, так:

$.ajax({
  url: 'mysite/save',
  type: 'POST',
  data: { param0:'hi there!', param1:'blah blah', param2:'we get it' }
});

В противном случае, да, вы должны его закодировать, поскольку, например, все, что содержит &, очень быстро все испортит. Предоставление его в виде объекта - гораздо более ясный/простой подход, хотя, на мой взгляд, так или иначе.

Вы также можете разделить его на части и получать свойства из других мест в строке, например, так:

$.ajax({
  url: 'mysite/save',
  type: 'POST',
  data: { 
          param0: $('#textbox0').val(), 
          param1: $('#textbox1').val(), 
          param2: $('#textbox2').val()
        }
});

Edit: Если вам интересно, как jQuery делает эту кодировку внутри, он использует $.param() (который вы также можете использовать напрямую) для кодирования объекта в строку, называемую здесь, и внутренности здесь.

37
ответ дан 29 November 2019 в 23:40
поделиться

Вам не нужно URL-кодировать переменные POST. Однако, если вы взаимодействуете с базой данных, вам нужно убедиться, что ваши переменные защищены от атак путем инъекций.

То, что у вас есть, будет работать, однако, как упоминала Вивин , если это форма, то лучший способ сделать это - через .serialize () .

Я лично использую это МНОГОЧИСЛЕННО для отправки всех форм (через .ajax () ).

0
ответ дан 29 November 2019 в 23:40
поделиться

Если у вас есть форма, вы также можете выполнить var data = jQuery ("# ​​myForm"). Serialize (); , который преобразует ее в форму, которая jQuery.ajax может понять и использовать. В противном случае используйте литерал объекта, описанный в ответе Ника.

3
ответ дан 29 November 2019 в 23:40
поделиться

может ли это помочь вам

function CallPageSync(url, data) {
    var response;
    $.ajax({
        async: false,
        url: url,
        data: data,
        timeout: 4000,
        success: function(result) {
            response = result;
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            response = "err--" + XMLHttpRequest.status + " -- " + XMLHttpRequest.statusText;
        }
    });
    return response;
}

и вы можете назвать это как

response = CallPageSync(checkPageURL, "un=" + username);
2
ответ дан 29 November 2019 в 23:40
поделиться
Другие вопросы по тегам:

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