zoukankan      html  css  js  c++  java
  • 关于ajax跨域

    众所周知,ajax是不允许跨域访问的,但是有的时候我们又需要用到ajax跨域。

    其实ajax跨域区分是很严格的,例如同一个服务器,就算端口不一样这也算是跨域。

    解决ajax跨域有三个方法:

      1.设置响应头。设置在允许跨域的服务器。setHeader  每一个代码都需要设置。

      2.设置代理。通过代理实现跨域。

      3.JSONP   JSON with padding   用script包裹 只能用get方法提交,不是真正的ajax方法。通过创建script方法跨域,返回一段可以执行的JS代码。

      

          
    /*当前网址是localhost:3000*/
    js代码
     
    $.ajax({
      type:"get",
      url:"http://localhost:3000/showAll",/*url写异域的请求地址*/
      dataType:"jsonp",/*加上datatype*/
      jsonpCallback:"cb",/*设置一个回调函数,名字随便取,和下面的函数里的名字相同就行*/
      success:function(){
       。。。
      }
     });
     
    /*而在异域服务器上,*/
    app.js
    app.get('/showAll',students.showAll);/*这和不跨域的写法相同*/
     
      
    /*在异域服务器的showAll函数里,*/
     
    var db = require("./database");
     
    exports.showAll = function(req,res){
     
    /**设置响应头允许ajax跨域访问**/
    res.setHeader("Access-Control-Allow-Origin","*");
     /*星号表示所有的异域请求都可以接受,*/
    res.setHeader("Access-Control-Allow-Methods","GET,POST");
     
    var con = db.getCon();
    con.query("select * from t_students",function(error,rows){
     if(error){
      console.log("数据库出错:"+error);
     }else{
      /*注意这里,返回的就是jsonP的回调函数名+数据了*/
      res.send("cb("+JSON.stringify(r)+")");
     }
    });
    }
  • 相关阅读:
    如何从ORACLE数据库生成HBM和JAVA
    timer
    工作流研究
    linux date命令设置时间
    耶基斯多得森曲线
    朋友考我的一个基础语法题
    微软企业库(一)
    标记属性
    Word自动化撤销、重做功能
    汇编中的ASSUME
  • 原文地址:https://www.cnblogs.com/dh55/p/5597213.html
Copyright © 2011-2022 走看看