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.