jQuery wysyłanie JSON

194

aktualizacja: Chciałbym przekazać var valueto na serwer

cześć, taki sam stary, taki sam stary ... :)

Mam formularz o nazwie <form id="testForm" action="javascript:test()">i obszar kodu o nazwie<code id="testArea"></code>

Korzystam z tego kodu, aby skreślić i wyświetlić dane w obszarze kodu:

var formData = form2object('testForm');
document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');
var value = JSON.stringify(formData, null, '\t');

Chcę wysłać te dane do pliku JSON. Pracowałem nad tym projektem: http://ridegrab.com/profile_old/ i jeśli naciśniesz Submit Queryprzycisk, zobaczysz, że nagłówek strony zapełni się.

Również chcę użyć tego skryptu do wysyłania danych:

    function authenticate(userName, password) {
    $.ajax
    ({
        type: "POST",
        //the url where you want to sent the userName and password to
        url: 'username:password@link to the server/update',
        dataType: 'json',
        async: false,
        //json object to sent to the authentication url
        data: '{"userName": "' + userName + '", "password" : "' + password + '"}',
        success: function () {

        alert("Thanks!"); 
        }
    })
}

Znowu wszystko, czego chcę, to móc wysłać te dane JSON na serwer. Mój serwer jest skonfigurowany do update or POSTdanych we właściwym miejscu.

Patrioticcow
źródło
Nie mogę zrobić to działa :) nie wiem jak umieścić je razem, aby wysłać te dane do serwera ... nawet jeśli mogę wymienić dataz data: value,... !! ??
Patrioticcow
Po pierwsze, czy jesteś pewien, że to nie jest problem z połączeniem? Jeśli przypiszesz errorfunkcję, czy zostanie wywołana? Jeśli tak, to z jakim błędem?
Wiseguy,
1
Chociaż ma ponad rok, odpowiem na najnowsze pytanie @ Patrioticcow o tym, jak to zrobić. Widzisz opcję „sukces” wysłaną do metody ajax? Zrób to samo z „błędem”. Jak w „error: MyErrorHandlingFunction” lub „error: function (error) {[tutaj błąd obsługi kodu]}”
vbullinger

Odpowiedzi:

220

„dane” powinny być strunkowym obiektem JavaScript:

data: JSON.stringify({ "userName": userName, "password" : password })

Aby wysłać formData, przekaż go do stringify:

data: JSON.stringify(formData)

Niektóre serwery wymagają również application/jsontypu zawartości:

contentType: 'application/json'

Istnieje również bardziej szczegółowa odpowiedź na podobne pytanie: Jquery Ajax Posting json w serwisie internetowym

Kyle Wild
źródło
@ tasos Myślę, że o to ci chodzi: stackoverflow.com/questions/5806971/…
Kyle Wild
Powtarzając tutaj niepoprawność; będzie to działało OK w przypadku prostych scenariuszy, ale wiadomość zakodowana w adresie URL może być bardzo problematyczna, szczególnie w przypadku tablic rzeczy.
FMM,
@FMM i Jonas N - Czy możecie mi pomóc dowiedzieć się, jak zaktualizować moją odpowiedź pod kątem poprawności? Przykłady w dokumentach jQuery (tutaj: api.jquery.com/jQuery.post ) sprawiają, że wygląda na to, że możesz opublikować obiekt JS lub ciąg znaków, co doprowadziło mnie do przekonania, że ​​jQuery poradzi sobie ze wszystkimi niezbędnymi seriami ciągów .
Kyle Wild,
Patrioticcow powiedział: „co, jeśli chcę wysłać json z wartości zmiennej” O ile nie jest to tablica lub obiekt, nie jest to poprawny JSON.
andsens
1
Zastanów się, co się dzieje, gdy dane zawierają, na przykład, listę rzeczy: { foo: [1,2,3], bar: 'baz' }. Zostanie to zakodowane w formie jako foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(nieskalowane, to foo[]=1&foo[]=2&foo[]=3&bar=baz). Prawdopodobnie nie to, co chcesz po stronie serwera.
FMM,
270

Publikujesz JSON w ten sposób

$.ajax(url, {
    data : JSON.stringify(myJSObject),
    contentType : 'application/json',
    type : 'POST',
    ...

jeśli podasz obiekt jako settings.data jQuery skonwertuje go na parametry zapytania i domyślnie wyśle ​​z typem danych application / x-www-form-urlencoded; charset = UTF-8, prawdopodobnie nie to, czego chcesz

teknopaul
źródło
@ TimLovell-Smith nie zrobi różnicy, ponieważ jQuery dataw żadnym wypadku nie przetworzy łańcucha
Phil
2

Jeśli wysyłasz to żądanie do posta między domenami, powinieneś sprawdzić ten link.

https://stackoverflow.com/a/1320708/969984

Twój serwer nie przyjmuje prośby o wysłanie wiadomości do różnych witryn. Tak więc konfiguracja serwera musi zostać zmieniona, aby umożliwić żądania między lokacjami.

nizam.sp
źródło