zoukankan      html  css  js  c++  java
  • Ajax配合Node搭建服务器,运用实例

    文档结构ajax.png

    index.html代码

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
    </script>
    <script>
    $(document).ready(function(){
      $("button").click(function(){
         $.ajax({  
                url: 'http://127.0.0.1:8088/api/seller',  
                dataType: 'jsonp',  //因为跨域所用用JSONP,
                type: 'get',  //JSONP只支持get方式请求,即使这里用的post应该会被jQuery默认改成get形式
                data: {  
                    test: 'ajax'  
                },  
                success: function (data) {  
                  console.log(data)  
                }  
            })  
      });
    });
    </script>
    </head>
    <body>
    <button>发送一个 HTTP POST 请求页面并获取返回内容</button>
    </body>
    </html>
    
    

    server.js代码

    let express = require('express'); //引入express模块
    let Mock = require('mockjs'); //引入mock模块
    var appData = require('./data.json'); //读取data.json的数据
    var seller = appData.seller; //appData一个对象{"seller":{"name":'zs',age:13},"goods":[{"id":1},{"id":2}],"ratings":[{"id":1},{"id":2}]}
    var goods = appData.goods; //获得不同数据
    var ratings = appData.ratings; //获得不同数据
    
    let app = express(); //实例化express
    
    
    //创建服务器接口方式之一
    app.all('/seller', function(req, res) {
      res.jsonp({
        error: 0,
        data: seller
      })
    })
    
    
    app.listen('8088', function() {
      console.log('server start at 8088')
    });
    
    
    • 点击按钮,既可在控制台得到服务器的返回数据
    • 通过server.js代码,node服务器搭建成功
    • 控制台 node server.js运行服务器,前端就可以访问接口

    Uncaught SyntaxError: Unexpected token :

    注意因为跨域,所以index.html的ajax访问用的jsonp方式,所以node服务器返回的数据是:res.jsonp,如果用res.json则会报错:Uncaught SyntaxError: Unexpected token :
    使用 Ajax 获取 json 时,存在跨域限制,;而 jsonp 实际是请求一个 script,然后允许里面的代码使用 jsonp 方式,但返回结果确实 json,自然出错,无法运行


    *上面创建接口方式还可以用另外的方式,index.html不变,改变server.js代码

    创建接口第二种方式

    server.js代码

    let express = require('express'); //引入express模块
    let Mock = require('mockjs'); //引入mock模块
    var appData = require('./data.json'); //读取data.json的数据
    var seller = appData.seller; //appData一个对象{"seller":{"name":'zs',age:13},"goods":[{"id":1},{"id":2}],"ratings":[{"id":1},{"id":2}]}
    var goods = appData.goods; //获得不同数据
    var ratings = appData.ratings; //获得不同数据
    
    let app = express(); //实例化express
    var apiRouters = express.Router();
    
    
    //创建服务器接口方式之二
    apiRouters.get('/seller', function(req, res) {
      res.jsonp({
        errno: 0,
        data: seller
      })
    })
    apiRouters.get('/goods', function(req, res) {
      res.jsonp({
        errno: 0,
        data: goods
      })
    })
    
    //此时index.html中的url: 'http://127.0.0.1:8088/api/seller',
    
    app.use('/api', apiRouters)//
    
    
    app.listen('8088', function() {
      console.log('server start at 8088')
    });
    
    

    创建接口第三种方式, 通过mockjs模拟数据

    server.js代码

    let express = require('express'); //引入express模块
    let Mock = require('mockjs'); //引入mock模块
    var appData = require('./data.json'); //读取data.json的数据
    var seller = appData.seller; //appData一个对象{"seller":{"name":'zs',age:13},"goods":[{"id":1},{"id":2}],"ratings":[{"id":1},{"id":2}]}
    var goods = appData.goods; //获得不同数据
    var ratings = appData.ratings; //获得不同数据
    
    let app = express(); //实例化express
    
    
    //创建服务器接口方式之三
    /**
     * @param  {[type]} req  [客户端发过来的请求所带数据]
     * @param  {[type]} res  [服务端的相应对象,可使用res.send返回数据,res.json返回json数据,res.down返回下载文件]
     */
    app.all('/api', function(req, res) {
      res.jsonp(Mock.mock({
        "status": 200,
        "data|1-9": [{
          "name|5-8": /[a-zA-Z]/,
          "id|+1": 1,
          "value|0-500": 20
        }]
      }));
    });
    
    app.listen('8088', function() {
      console.log('server start at 8088')
    });
    
  • 相关阅读:
    flex datagrid进行删除或增加操作后自动刷新
    java 一个很简单的applet
    转:35岁前必成功的12级跳(男女通用)
    flex DisplayObject UIComponent的区别
    flex flash.utils.Dictionary和Object
    java 正则表达式进行剔除字符
    Flex 元数据标签使用
    使用TableAdapter的Update方法使用注意事项
    android中捕捉menu按键的点击事件
    Repeater 嵌套repeater输出不规则列表
  • 原文地址:https://www.cnblogs.com/huangxingyuan/p/9225167.html
Copyright © 2011-2022 走看看