2010-06-17 12 views
15

Chciałbym wywołać wywołanie ajax jako POST, przejdzie to do mojego serwletu. Chcę wysłać sparametryzowanych danych, takich jak następujące:Używając jquery do utworzenia POST, jak poprawnie podać parametr "data"?

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

Podaję to jako parametr "danych" mojego wywołania jquery ajax() mojego jquery. Więc to powinno być wstawione w ciało POST, prawda? (Mam na myśli, nie dołączony do mojego adresu "mysite/save"):

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

wydaje się działać poprawnie. W moim serwletu, jestem po prostu dumpingu wszystkie otrzymane parametry, i widzę jak wszystko się ładnie przez:

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

również, mam url zakodować mój ciąg danych ręcznie przed użyciem, prawda? Podobnych:

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

Dzięki!

Odpowiedz

29

Łatwiejszy sposób jest zapewnienie właściwość data jako przedmiot, na przykład:

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

Inaczej, tak należy go zakodować, jak nic z & na przykład bardzo szybko przykręcić rzeczy. Dostarczenie go jako przedmiotu jest jednak znacznie prostszym i prostszym podejściem, moim zdaniem.

Można również przestrzeń go i pobrać właściwości z innych miejsc inline, podobnie jak to:

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

Edit: Jeśli jesteś ciekawy jak jQuery czy to kodowanie wewnętrznie, to używając $.param() (co możesz również użyć bezpośrednio), aby zakodować obiekt na łańcuch, o nazwie here, i wnętrznościach here.

+0

Bardzo fajne, dzięki. – user246114

3

Jeśli masz formularz, możesz także zrobić var data = jQuery("#myForm").serialize();, który umieszcza go w formie, która może być zrozumiała i używana przez jQuery.ajax. W przeciwnym razie użyj literału opisanego w odpowiedzi Nicka.

2

może to pomóc można

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

i to nazwać jak

response = CallPageSync(checkPageURL, "un=" + username); 
+0

Myślę, że chce wiedzieć * jak * budować parametr 'data', a nie jak używać' jQuery.ajax'. –

+0

po prostu napisz, jak piszesz w URL: "ID = 10 & Name = aaaa" –

+0

definiowanie typu zgłoszenia jest lepsze Myślę, że .. typ: "POST" –

0

Nie trzeba do URL zakodować zmienne POST. Jednak w przypadku interakcji z bazą danych należy upewnić się, że zmienne są chronione przed wstrzyknięciem.

To, co masz, będzie działało, ale pod warunkiem, że jest to formularz, najlepszym sposobem na to jest .serialize().

Używam tego osobiście dużo dla wszystkich moich zgłoszeń formularzy (wykonanych przez .ajax()).