求node.js&ajax; 实例 前端向后端传值方式
发布于 10 年前 作者 kingche 30517 次浏览 最后一次编辑是 8 年前 来自 问答

1.求node.js 结合ajax 的完整实例 2.页面的参数怎样从前端传递到node.js后端进行处理(除了用表单提交,然后后端用req.body.xx提取之外) 例如若demo是个连接的话,连接demo页面会跳转,但怎样将demo这个值传回后端,进行相关处理了?

11 回复
var req = new XMLHTTPRequest();
req.onload = function () {
    console.log(req.status);  // 响应码
    console.log(req.responseText);  // 响应字符
};
req.open('POST', true);
req.setRequestHeader('请求头名', '请求头值');
req.send('HTTP请求体字符');
JSON.parse(STRING) => OBJECT
JSON.stringify(OBJECT) => STRING

@tulayang sorry,搞不明白~

@kingche

那就真没法明白了,看看《javascript高级编程》吧

@tulayang 谢谢!请问基于express框架的node.js可以和前端的ajax实现双向通信吗?

@kingche

客户端和服务器通信,本身是tcp-http。nodejs只不过是实现tcp-http,然后提供接口编程罢了。

这个接口就是

  • req.headers 看请求头
  • req.on(‘data’) 请求事件
  • res.writeHeader() 写响应头
  • res.write() 写响应体

前端ajax的接口就是:XMLHTTPRequest的实例ajax

  • ajax.status 看响应码
  • ajax.responseText 看响应体
  • ajax.onload 响应事件
  • ajax.open() 请求方法
  • ajax.setRequestHeader() 请求头
  • ajax.send() 请求体

楼主是想用封装好的ajax吧… 我写个一个帖子是jq的ajax,可以看看 http://my.oschina.net/l3ve/blog/281084

前端用的是jquery,请求代码如下:

$.ajax({
			type: 'GET',
			dataType: 'html',
			url: '/views/main.html',
			data: { type: "getself",username:getCookie("username")},
			success: function (data) {
				$("#user_msg").append(data);
			},error:function(XMLHttpRequest, textStatus, errorThrown){
				console.log(XMLHttpRequest.status);
				console.log(XMLHttpRequest.readyState);
				console.log(textStatus);
			}
		});

这里的url 写的是/views/main.html.这里的/views 指向的是我项目根目录下的views 文件夹(后台要配置一下) 然后后端相应请求的代码

app.post('/views/main.html',function(req,req){
//执行逻辑;
});

也可以这样写,把回调函数封装起来

app.post('/views/main.html',user.list);

user.list 是我user.js 下的list 方法

之前有提到 后台配置一下的问题 我的配置如下

app.engine('.html', ejs.__express);
app.set('view engine','html');
app.set('views',__dirname+"/views");
app.set('view option',{layout:false});

@taufik 非常好,前后端逻辑完整.

你的问题完全是因为你还没了解nodejs。错应该说还没了解后端语言的机制。用不用表单不是”后端“决定,而且前端使用什么方式,AJAX就是解决form的问题。 但你的问题说是demo判断连接其实和form应该没太多关系,如:<a href="/user?username=2b"/>用户姓名</a>这个连接是连接到一个"/user"的路由连接。带了一个username参数 后端获取: app.get(’/user’,function(req,res){ var username = req.query.username <–后段取得username的值"2b" if(username==‘2b’){ res.send(‘恭喜通过2b测试’) //下一步执行的 }else{ res.redirect(’/’) //返回刚才的页面 【"/"路由是首页】 } })

@xiaxiaokang 自己通过写实例,对这套机制已经了解。 点击demo连接跳转,只要在node用app.ge获取demo的href内容即可,然后由于是app.get操作;获得参数可用req.params.xx; 例如demo的链接href="/demo/username" 那么app.get(’/demo/:username’,function(req,res){ var username = req.params.username; … }); 是这样的吧!

@kingche 没错,,当日你也可以选择参数方式看你自己喜欢, 参数:username这种用不好就会和路由混乱 如 路由demo/xxxx 都属于demo/:username的范围 我比较习惯用参数。。

回到顶部