我的代码看起来像这样,我想用jQuery的ajax函数练习(我已经运行npm install jquery
来安装包):
var $ = require('jquery');
var remoteValue = false;
var doSomethingWithRemoteValue = function() {
console.log(remoteValue);
}
var promise = $.ajax({
url: 'https://google.com'
});
//outputs "true"
promise.always(function() {
remoteValue = true;
doSomethingWithRemoteValue();
});
//outputs "foobar"
promise.always(function() {
remoteValue = 'foobar';
doSomethingWithRemoteValue();
});
但NodeJS编译器抱怨jQuery模块中没有ajax
方法。
bash-3.2$ node test.js
/Users/hanfeisun/Downloads/node/test.js:14
var promise = $.ajax({
^
TypeError: Object function ( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
} has no method 'ajax'
at Object.<anonymous> (/Users/hanfeisun/Downloads/node/test.js:14:17)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
jQuery for Browser JS Compiler和NodeJS的javascript代码不一样吗?
如果没有,有没有人知道主要原因?谢谢!
答案 0 :(得分:1)
我不太熟悉Node的javascript环境,但ajax的意思是使用javascript处理服务器响应而不会导致页面刷新。在运行Node的服务器上,您只能发出正常的HTTP请求。
事实上,一个快速的谷歌搜索显示,JQuery在$ .ajax上构建的基础XMLHttpRquest在Node中不存在(事实上Wikipedia article on XHR表明它是浏览器对象模型的一部分),所以它不会从Node获得(尽管您可以通过利用Node的http请求模块来模拟它。)
如果你想试验$ .ajax,你应该在浏览器环境中进行。您可以从任何包含JQuery的网页(例如Stackoverflow)从javascript控制台执行此操作,或者在标题中使用脚本标记创建自己的测试HTML页面,该标记从CDN中获取JQuery。
答案 1 :(得分:0)
由于错误状态,您需要一个窗口对象来使用jquery。 您将需要JSDOM才能使用Jquery方法。试试这个。
const { JSDOM } = require( "jsdom" );
const { window } = new JSDOM( "" );
const $ = require( "jquery" )( window ); // or const jquery = require( "jquery" )( window );
答案 2 :(得分:-1)
Node.js的Javascript(服务器端)与通常的客户端javascript有点不同。它是一个javascript但具有不同的上下文环境。
jQuery应该只帮助客户端javascript。请尝试以下链接以获取更多信息。