node.js - 做一个单页网站,用ajax时,相应的后端用node要怎么写
PHPz
PHPz 2017-04-17 11:02:17
0
3
562

菜鸟遇到的问题是:pjax改变url,并作相应刷新局部页面。但是如果直接进入到这个url,就会出现问题(页面显示Ajax返回的JSON数据),求大神提供个正确思路

PHPz
PHPz

学习是最好的投资!

reply all (3)
阿神

我的方法是用Accept头来判断请求类型。
比如对于同样一个url,/products
请求的时候设置accept为text/html,方法为get,则会返回一个html页面。
如果accept为application/json,方法为get,则返回一个json格式的product列表。/products?limit=20则会返回列表中前20个项目。
如果accept为application/json,方法为put,则会添加一个product。
大概就是这样,通过url,http method,accept来控制请求的结果,

Request URL:/products Request Method:GET Request Headers Accept:application/json, text/plain, */* Response Headers date:Sun, 24 Nov 2013 07:02:46 GMT items-count:3 page-count:1 page-number:1 page-step:20 Server:BWS/1.0 vary:Accept-Encoding x-powered-by:Express
    洪涛

    如果后端用了express框架的话就好办了。

    res.format({ 'text/html': function() { // 这里是直接用 url 访问的 render 逻辑 // res.render('products', {...}); }, 'application/json': function() { // 这里是 ajax 方式的逻辑 // res.send({...}); } });
      刘奇

      大部分的JavaScript框架在发送Ajax请求时会附带一个标识Ajax的请求头:

      {"HTTP_X_REQUESTED_WITH" : "XmlHttpRequest"}

      如果没有,可以手动设置一个,在jQuery中是这样:

      $.ajax { beforeSend: function(jqXHR, settings) { jqXHR.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); } };

      这样在服务端就可以根据请求头作判断了,类似于这样:

      if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { /* special ajax here */ // send JSON data } else { // send html data }
        Latest Downloads
        More>
        Web Effects
        Website Source Code
        Website Materials
        Front End Template
        About us Disclaimer Sitemap
        php.cn:Public welfare online PHP training,Help PHP learners grow quickly!