jQuery publiant JSON


196

mise à jour: je voudrais transmettre le var valueau serveur

bonjour, même vieux, même vieux ... :)

J'ai un formulaire appelé <form id="testForm" action="javascript:test()">et une zone de code appelée<code id="testArea"></code>

J'utilise ce code pour stringifier et afficher les données dans la zone de code:

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

Ce que je veux, c'est envoyer ces données dans un fichier JSON. J'ai travaillé sur ce projet: http://ridegrab.com/profile_old/ et si vous appuyez sur le Submit Querybouton, vous verrez la tête de la page se remplir.

Je veux aussi utiliser ce morceau de script pour envoyer des données:

    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!"); 
        }
    })
}

Encore une fois, tout ce que je veux, c'est pouvoir envoyer ces données JSON au serveur. Mon serveur est configuré pour update or POSTles données au bon endroit.


je ne peux pas le faire fonctionner :) je ne sais pas comment les assembler pour envoyer ces données au serveur ... même si je remplace datapar data: value,... !! ??
Patrioticcow

Premièrement, êtes-vous certain que ce n'est pas un problème de connexion? Si vous attribuez une errorfonction, est-elle appelée? Si oui, avec quelle erreur?
Wiseguy

1
Bien qu'il ait plus d'un an, je répondrai à la dernière question de @ Patrioticcow sur la façon de procéder. Vous voyez l'option "succès" que vous avez envoyée dans la méthode ajax? Faites la même chose avec «erreur». Comme dans "error: MyErrorHandlingFunction" ou "error: function (error) {[Error handling code here]}"
vbullinger

Réponses:


224

'data' doit être un objet JavaScript stringifié:

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

Pour envoyer votre formData, transmettez-le à stringify:

data: JSON.stringify(formData)

Certains serveurs nécessitent également le application/jsontype de contenu:

contentType: 'application/json'

Il y a aussi une réponse plus détaillée à une question similaire ici: Jquery Ajax Posting json to webservice


@tasos Je pense que c'est ce que vous recherchez: stackoverflow.com/questions/5806971/…
Kyle Wild

Faire écho à l'incorrection ici; cela fonctionnera bien pour des scénarios simples, mais le message encodé en URL peut être très problématique, en particulier pour les tableaux de trucs.
FMM

@FMM et Jonas N - Pouvez-vous m'aider à trouver comment mettre à jour ma réponse pour qu'elle soit correcte? Les exemples dans la documentation jQuery (ici: api.jquery.com/jQuery.post ) donnent l' impression que vous pouvez publier un objet JS ou une chaîne, ce qui m'a amené à croire que jQuery gérerait toute la sérialisation de chaîne nécessaire .
Kyle Wild du

Patrioticcow a dit: "Et si je veux envoyer le json à partir de la valeur var" À moins que la valeur ne soit un tableau ou un objet, ce n'est pas un JSON valide.
andsens

1
Pensez à ce qui se passe lorsque vos données contient, par exemple, une liste des choses: { foo: [1,2,3], bar: 'baz' }. Cela sera encodé sous la forme foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(sans échappement, c'est foo[]=1&foo[]=2&foo[]=3&bar=baz). Probablement pas ce que vous voulez côté serveur.
FMM

275

Vous publiez du JSON comme ça

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

si vous passez un objet en tant que settings.data jQuery le convertira en paramètres de requête et par défaut l'envoyer avec le type de données application / x-www-form-urlencoded; charset = UTF-8, probablement pas ce que vous voulez


@ TimLovell-Smith ne fera aucune différence car jQuery ne traitera datade toute façon pas une chaîne
Phil

2

Si vous envoyez cette demande de publication à un domaine croisé, vous devriez consulter ce lien.

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

Votre serveur n'accepte pas la demande de publication intersite. La configuration du serveur doit donc être modifiée pour autoriser les requêtes intersites.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.