如何通过发送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页面。
答
如果您在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;
// ...
});
这是您的实际代码?您在服务器和客户端代码中都有一个语法错误,这会导致代码无法运行。你说'我没有使用express',但'app.use(bodyParser.urlencoded({extended:true}));'看起来像epress,所以你应该告诉你使用哪个框架而不是express。 –
它是实际的代码,但我已经粘贴了我的代码的一部分,我想发送和接收来自HTML表单的数据。只是我想要一个解决方案如何获取node.js服务器中的数据? – Rapid
好的,但你在这里有一个语法错误''(''+ result1.toString()'“);'所以你的服务器代码不会运行。而且在客户端的'myFunction'函数末尾有一个'}',所以这段代码也不会运行。你仍然没有告诉你使用什么框架而不是表达。如果不是'express'应用程序,“app”是什么? –