如何通过发送Ajax调用将html表单数据发送到node.js服务器?

如何通过发送Ajax调用将html表单数据发送到node.js服务器?

问题描述:

我想发送表单数据到使用Ajax的node.js服务器,我暂停了下面的方法发送数据。如何通过发送Ajax调用将html表单数据发送到node.js服务器?

我没有得到如何我不使用快递框架node.js的

client.HTML

<script> 
function myFunction() { 
    var region = document.getElementById("region").value; 
    var os = document.getElementById("os").value; 
    var data = {}; 
    data.region = region; 
    data.os = os; 
    $.ajax({ 
    type: 'post', 
    datatype: 'jsonp', 
    data: JSON.stringify(data), 
    contentType: 'application/json', 
    url: 'http://127.0.0.1:8083/', //node.js server is running 
    success: function(data) { 
     alert("success"); 

    } 
    }); 

</script> 
<form> 
<select id="region" name="region" class="region"></select> 
<select id="os" name="os" class="os"></select> 
<input type="button" value="search" class="fil_search" onclick="myFunction()"/> 
</form> 

server.js中的node.js服务器程序接收它

var http = require('http'); 
var fs = require('fs'); 
var url = require('url'); 
var MongoClient = require('mongodb').MongoClient; 
var assert = require('assert') 
var ObjectId = require('mongodb').ObjectID; 
var express = require('express'); 
var bodyParser = require('body-parser'); 
var app  = express(); 
var result1=[]; 
var result2=[]; 
var result3=[]; 
var result4=[]; 
var result5=[]; 
var result6=[]; 
var result7=[]; 
var i=0; 
var region; 
var os; 
app.use(bodyParser.urlencoded({ extended: true })); 

MongoClient.connect("mongodb://192.168.1.22:27017/test", function(err, db) { 

if(err) { return console.dir(err); } 
else { 
app.get('/',function(req, res) { 

var url_parts = url.parse(req.url, true); 
var url_parsed = url.parse(req.url, true); 

"i want data here from ajax to perform" 

console.log("connected"); 


var instance = db.collection('instance'); 
var region = db.collection('region'); 

region.findOne(({$and: [{"region_name": region_name},{"os_type": os}]}), function(err, result){ 
if(err){  
throw(err); 
} 
else{ 
console.log(region); 
var newr = result.inst_name; 

instance.find({ "inst_id": { "$in": newr } }).toArray(function(err, resultn){ 
if(err){ 
throw(err); 
} 
else{  
    var len=resultn.length; 

    console.log(resultn); 
    console.log(len); 

    for(var i=0;i<len;i++) 
    { 
     result1[i]=resultn[i].inst_type; 
     result2[i]=resultn[i].vcpu; 
     result3[i]=resultn[i].memory_gib; 
     result4[i]=resultn[i].storage; 
     result5[i]=resultn[i].phy_processor; 
     result6[i]=resultn[i].clock_spd; 
     result7[i]=resultn[i].netwk_pef;    
    } 
    var wstream = fs.createWriteStream('myOutput.txt'); 
    wstream.write(result1.toString()+"~"+result2.toString());  
    //var str = "Hi man" 
    res.writeHead(200, {'Content-Type':'text/html'}); 
    //res.end(url_parsed.query.callback+'("'+resultn.toString()+'")'); 
    res.end(url_parsed.query.callback+'("'+result1.toString()+"~"+result2.toString()+"~" 
    +result3.toString()+"~"+result4.toString()+"~"+result5.toString()+"~"+result6.toString() 
    +"~"+result7.toString()+'")');  
} 
}); 
} 
}); 
}).listen(process.env.PORT || 8083); 

}
});

我不明白如何接收node.js服务器程序中的数据,并且在接收到数据后,我想要处理该数据并将处理后的数据发送回相同的HTML页面。

+0

这是您的实际代码?您在服务器和客户端代码中都有一个语法错误,这会导致代码无法运行。你说'我没有使用express',但'app.use(bodyParser.urlencoded({extended:true}));'看起来像epress,所以你应该告诉你使用哪个框架而不是express。 –

+0

它是实际的代码,但我已经粘贴了我的代码的一部分,我想发送和接收来自HTML表单的数据。只是我想要一个解决方案如何获取node.js服务器中的数据? – Rapid

+0

好的,但你在这里有一个语法错误''(''+ result1.toString()'“);'所以你的服务器代码不会运行。而且在客户端的'myFunction'函数末尾有一个'}',所以这段代码也不会运行。你仍然没有告诉你使用什么框架而不是表达。如果不是'express'应用程序,“app”是什么? –

如果您在server.js文件中有app.use(bodyParser.urlencoded({ extended: true }));然后用下面给出bodyParser你可以从阿贾克斯数据:

app.post('/', function(req, res) { //your ajax should also post to url: '/' 
    var region = req.body.region, 
    os = req.body.os; 
    // ... 
});