如何在node.js中使用Ajax?

我知道以前有人问过这个问题,但我还是不明白。我正在使用node.js,还想在其中使用Ajax。我的代码是:

var $ = require('jquery');
var http = require("http");
var ws = require("nodejs-websocket");
var fs = require("fs");
var colors = require('colors');

http.createServer(function (req, res) {
    fs.createReadStream("index.php").pipe(res)
}).listen(8080)
// ###################################################################################################################################
// ########################################################## CLASSE SERVER ##########################################################
// ###################################################################################################################################
var tableauDeJoueur = new Array();

var server = ws.createServer(function (connection){
    connection.nickname = null
    connection.on("text", function (str){
        if (connection.nickname === null){
            connection.nickname = str;
            
            console.log((connection.nickname+" arrive sur PixelWorld !").green);
        }
        else{
            var code = str.substring(0,2);
            var reste = str.substring(2,str.length);
            switch(code){
                case "01":
                    var coupe = reste.split("4H[m~Ft7");
                    var mail = coupe[0];
                    var mdp = coupe[1];
                    $.ajax({
                        url: "fonctionPHP/connection.php",              
                        type: "POST",
                        data: {'mail': mail,'mdp': mdp},
                        async:false,
                        success: function(html){
                            if(html == "OK"){
                                console.log("oui");
                            }
                            else{
                                console.log("non");
                            }
                        }
                    });
                    break;
                case "02":
                    break;
            }
        }
    })
    connection.on("close", function (){
        console.log((connection.nickname+" a quitté PixelWorld !").red);
    })
})
server.listen(8081)

function broadcast(str) {
    server.connections.forEach(function (connection) {
        connection.sendText(str)
    })
}

我的问题是在“ $ .ajax({”这里。当用户到来时,服务器会通知我,这没关系。但是,当它发送带有01代码的消息时,节点会崩溃并提示:

 $.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 Connection.<anonymous> (/var/www/dhkuhnuhbnkiuh/app.js:46:8)
    at Connection.EventEmitter.emit (events.js:95:17)
    at Connection.processFrame (/var/www/dhkuhnuhbnkiuh/node_modules/nodejs-websocket/Connection.js:516:9)
    at Connection.extractFrame (/var/www/dhkuhnuhbnkiuh/node_modules/nodejs-websocket/Connection.js:458:14)
    at Connection.doRead (/var/www/dhkuhnuhbnkiuh/node_modules/nodejs-websocket/Connection.js:209:23)
    at Socket.<anonymous> (/var/www/dhkuhnuhbnkiuh/node_modules/nodejs-websocket/Connection.js:52:8)
    at Socket.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    at emitReadable (_stream_readable.js:404:5)
    at readableAddChunk (_stream_readable.js:165:9)

感谢你的帮助!

</div>

2个回答


nodejs </ code>发出请求非常容易,根本不必使用 $。ajax </ code>。 您可以使用npm 请求模块。 $。ajax </ code>用于触发来自浏览器的请求。 但是,如果您真的想在 node </ code>上使用 $。ajax </ code>,我认为您可以阅读这个问题 </ p>
     </ div>

展开原文

原文

Doing a request from nodejs is fairly easy, dont have to use $.ajax at all. You can use the npm request module. $.ajax is built for firing requests from the browser. But if you 'really' want to use $.ajax on node, I think you can read through this question

First,we begin with understanding AJAX and Node.Ajax is a client-side xml-based technology that automatically updates contents of a web page, without the page having to reload. Node.js is a server-side scripting language. To illustrate this clearly, we will create a client client.html file and a server server.js Aside from having npm installed, we will install express middleware and some of it's dependencies that we are going to use. npm install --save express body-parser body-parser-xml

Let's begin by writing our server.js file. This file is going to parse xml requests sent AJAX. After processing request body, server should then send response back to client.

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
require('body-parser-xml')(bodyParser);
app.use(bodyParser.xml({
limit:'1MB',
XmlParseOptions:{
normalize:true,
normalizeTags:true,
explicitArray:false
}
}));
app.get('/',function(req,res){
res.sendFile(__dirname + "/" + "client.html");
});
 app.post('/library',bodyParser.urlencoded({extended:false}),function(req,res){
console.log(req.body);
var title = req.body.book.title;
var author = req.body.book.author;
var year = req.body.book.year;
console.log(title + " " +author + " " +year);
//optional operations like database can be performed here
// we are sending a response mimicking a successfull search query
res.end("Book Found in library");
})
var server = app.listen(8080,function(){
var host = '127.0.0.1';
var port = server.address().port;
console.log("Server running at http://%s:%s
",host,port);

});

Next, create client.html file. This file will have simple form that when submitted call on an AJAX function that in turn sends xml data to server.js then waits and process response

<!DOCTYPE html>
<html>
<head>
<title></title>
<script type = "text/javascript">
function Search() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.getAllResponseHeaders();
xmlhttp.open('POST','http://127.0.0.1:8080/library',true);
console.log(document.getElementById('title').value);
console.log(document.getElementById('author').value);
var text = "<book>" +
"<title>"+document.getElementById('title').value+"</title>" +
"<author>"+document.getElementById('author').value+"</author>" +
"<year>"+document.getElementById('year').value+"</year>" +
"</book>";
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
alert(xmlhttp.responseText);
console.log("All ok. You hit the server");
}
}
};
xmlhttp.setRequestHeader("Content-Type","text/xml");
xmlhttp.send(text);
}
</script>
</head>
<body>
<form name = "" method = "POST" action = "">
Title:<input type = "text" name = "title" id = "title">
Author:<input type = "text" name = "author" id = "author">
Year:<input type = "text" name = "year" id = "year"><br>
<br>
<input type = "button" value = "Search" onclick = "Search()"/>
</form>
</body>
</html>

Hope this guide helps in future. Thanks

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐