je fait une extension Chrome qui appelle la méthode ajax
jQuery:Comment puis-je récupérer l'objet que j'ai passé dans l'attribut `data` de jQuery.ajax() côté serveur (node.js)?
contenu-script.js
[...]
$.ajax({
"url": "http://localhost:5000/",
"type": "PUT",
"contentType": "application/json",
"data": { "name": "random object" },
"dataType": "json"
});
[...]
Du côté du serveur, je suis en train de chercher les informations transmises dans l'attribut data
:
web.js
[...]
app.put('/', function(request, response) {
console.log(request.data);
});
[...]
Mais je reçois undefined
à la place. Comment l'objet est-il passé dans l'attribut data
supposé être récupéré côté serveur (Node.js + express.js)?
J'ai aussi essayé console.log(request)
et a beaucoup de choses là-dedans, mais rien qui ressemblait à l'info je suis passé le long dans l'attribut data
...
EDIT
Ma dernière tentative (basée sur la réponse de graydsl) apporte les modifications suivantes au code ci-dessus:
- Ajouté
app.use(express.bodyParser());
juste avantapp.put...
. - Changé
put
-post
partout - changé
request.data
àrequest.body.data
Maintenant, le code fait ce que je veux au moment de répondre à une forme comme ceci:
<form method="post" action="/">
<input name="data" type="text" value="WOO HA" />
<input type="submit" name="submit" value="submit" />
</form>
Cependant, il ne parvient toujours pas si je revenir à utiliser post
au lieu de put
(et le navigateur finit sur http://localhost:5000/?data=WOO+HA&submit=submit
pour une raison quelconque)
Il échoue également lorsque put
ting (ou post
ing) avec ajax (voir le code ci-dessus). Lorsque je tente avec ajax, je reçois ce sur le serveur:
SyntaxError: Unexpected token ILLEGAL
at Object.parse (native)
at IncomingMessage.<anonymous> (/home/shawn/.node_libraries/.npm/connect/1.8.7/package/lib/middleware/bodyParser.js:135:16)
at IncomingMessage.emit (events.js:61:17)
at HTTPParser.onMessageComplete (http.js:133:23)
at Socket.ondata (http.js:1019:22)
at Socket._onReadable (net.js:683:27)
at IOWatcher.onReadable [as callback] (net.js:177:10)
J'ai réussi à faire le code dans mon post original (avant l'édition) fonctionne avec les changements suivants: Comme vous l'avez suggéré, utilisez 'request.body.name' plutôt que' request.data' et en utilisant 'JSON.stringify' sur l'objet passé à l'attribut data de jQuery.Voici l'exemple de travail: content-script: http://pastebin.com/iY1V5bWC, sur le serveur: http://pastebin.com/r7B6sjdm. Cependant, cela ne fonctionne pas avec plusieurs domaines. Au lieu de cela, mon navigateur (chrome) bloque le PUT et dit "Origin http://fiddle.jshell.net n'est pas autorisé par Access-Control-Allow-Origin." Ceci est une autre question cependant. – Shawn
FYI J'ai essayé d'utiliser GET au lieu de PUT avec le même résultat: Il est bloqué par le chrome lors de l'interdomaine. – Shawn
@Shawn en ce qui concerne les domaines inter-domaines, avez-vous essayé d'envoyer les bons en-têtes de l'intérieur de votre itinéraire epxress? Res.header "Accès-Contrôle-Autoriser-Origine", "*" res.header "Accès-Contrôle-Autoriser-En-têtes", "X-Demandé-Avec" – jeroenbourgois