web-dev-qa-db-fra.com

jQuery.ajax () dans node.js?

Est-il possible d'utiliser jQuery.ajax() dans node.js exactement comme c'est le cas pour la syntaxe? 

J'essaie de partager du code de navigateur non-interface utilisateur avec node.js. Je ne veux pas remplacer tous les appels de fonction existants par mon propre wrapper. 

Actuellement, quand je l'essaie, il dit "Pas de transport" par défaut car jQuery détecte le domaine. Si je l'éteins en définissant jQuery.support.cors, cela indiquerait que XMLHttpRequest.open () n'est pas disponible. 

31
voidvector

J'ai pu résoudre le problème "Pas de transport" en utilisant le module XMLHttpRequest, comme ceci:

var $ = require('jquery'),
    XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;

$.support.cors = true;
$.ajaxSettings.xhr = function() {
    return new XMLHttpRequest();
};
40
webXL

considérez également najax, un wrapper pour le module de requête de nœud qui permet la syntaxe de style jquery pour les requêtes côté serveur

https://github.com/alanclarke/najax

var najax = require('najax');
najax('http://www.google.com', function(html){ console.log(html); });
najax('http://www.google.com', { type:'POST' }, function(html){ console.log(html); });
najax({ url:'http://www.google.com', type:'POST', success: function(html){ console.log(html); });
najax({ url:'http://www.google.com', type:'POST' }).success(function(resp){}).error(function(err){});

najax.get, najax.post, najax.put, najax.delete...
10
alzclarke

Si vous voulez la syntaxe exacte jQuery.ajax, essayez https://github.com/driverdan/node-XMLHttpRequest

Mais vraiment, si vous avez le contrôle sur ce que vous appelez ajax, vous devriez le faire avec le http.request du noeud ou un module comme request

8
fent

Je partage également du code entre un navigateur et nodejs et utilise également JQuery pour les appels Ajax. JQuery nécessite une fenêtre que j'utilise depuis domino.

mettre à jour:

if (typeof module !== 'undefined' && module.exports)
{
  if (typeof global !== 'undefined' && typeof global.process !== 'undefined' &&
    Object.prototype.toString.call(global.process) === '[object process]') {
    var domino = require('domino');
    var window = domino.createWindow('<html></html>');

    var document = window.document;
    var $ = require('jquery')(window);
    var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
    $.support.cors = true; // cross domain, Cross-Origin resource sharing
    $.ajaxSettings.xhr = function() {
      return new XMLHttpRequest();
    };
  }
}
7
Arnd Brugman

Vous pouvez utiliser Electron , il autorise les navigateurs et les nœuds hybrides.

Auparavant, j'avais essayé d'utiliser canvas2d dans nodejs, mais j'ai finalement abandonné. Il n’est pas supporté par nodejs default, et trop difficile à installer (beaucoup de ... dépendants) . Tant que je n’utilise pas Electron, je peux facilement utiliser tout mon code de navigateur précédent, même WebGL, et transmettre la valeur du résultat (par exemple . result image base64) en code nodejs.

0
gonnavis