JQuery.ajax() в node.js?

Можно ли использовать jQuery.ajax() в node.js точно так же, как это синтаксис?

Я пытаюсь использовать код браузера без интерфейса пользователя с node.js. Я не хочу заменять все существующие вызовы функций своей собственной оболочкой.

В настоящее время, когда я пытаюсь, он сказал бы "Нет транспорта" по умолчанию, потому что jQuery выполняет обнаружение домена. Если я отключу его, установив jQuery.support.cors, он сказал бы, что XMLHttpRequest.open() недоступен.

Ответ 1

Мне удалось решить проблему "Нет транспорта" с помощью модуля XMLHttpRequest, например:

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

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

Ответ 2

также рассмотрите najax, оболочку для модуля запроса node, который позволяет синтаксис стиля jquery для запросов на стороне сервера

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...

Ответ 3

Если вам нужен точный синтаксис jQuery.ajax, попробуйте https://github.com/driverdan/node-XMLHttpRequest

Но действительно, если у вас есть контроль над тем, что вы вызываете ajax, вы должны сделать это с помощью node http.request или модуля типа request

Ответ 4

Я также использую код между браузером и nodejs, а также использую JQuery для вызовов Ajax. JQuery требует окна, которое я использую из домино.

обновление:

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

Ответ 5

Вы можете использовать Electron, он позволяет использовать гибридные браузеры и узлы.

Раньше я пытался использовать canvas2d в nodejs, но, в конце концов, я сдался. Он не поддерживается nodejs по умолчанию, и слишком сложно его установить (многие многие... dependeces). Пока я не пользуюсь Electron, я могу легко использовать весь мой предыдущий код browserjs, даже WebGL, и передать значение результата (например, данные результата base64) в код nodejs.