为什么node.js的jQuery包中没有$ .ajax方法?

时间:2014-11-28 08:02:00

标签: javascript jquery ajax node.js

我的代码看起来像这样,我想用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代码不一样吗?

如果没有,有没有人知道主要原因?谢谢!

3 个答案:

答案 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。请尝试以下链接以获取更多信息。

Client side scripting and Server side scripting languages