ajax同源

ajax默认只能接收来自同一个 协议 ip地址 端口号 的请求,

即如果 请求是 http://127.0.0.1/8080/ 则只有http://127.0.0.1/8080/ 的服务器才可以响应

解决方案1:

<script src ="http:127.0.0.1/5500"> 在script中的src中的请求是可以跨域的

但是要求返回的必须是 函数的调用语句

下面的例子中,服务器只能返回函数的调用语句,json格式的字符都不可以,而且这是src,不是正常的ajax请求,不知道怎么设置请求头和请求体,所以这么写没什么用?

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #text {
            width: 200px;
            height: 200px;
            background: 1px solid red;
        }
    </style>
</head>

<body>
    <div id="text"></div>
    <script src=".\js\app.js" type="text/javascript" charset="utf-8"></script>
    <br>
    <div id="display"></div>
    <input id="test2"></input>
    <script>
        function handel(data){
            var text =document.getElementById("display");
            text.innerHTML=data.msg;
        }
    </script>
</body>

</html>
<script>
   var test2=document.getElementById("test2");
   test2.onmousemove=function(){
       var script= document.createElement("script");
       script.setAttribute("src","http://127.0.0.1:8000/check");
       document.body.appendChild(script);
   }
</script>
app.all('/check', (request, response) => {
    // response.setHeader('Access-Control-Allows-Origin','*');s
    const data =
    {
        exist: 1,
        msg: '用户已经存在'
    };
    let str = JSON.stringify(data);
    // 返回handel({"exist":1,"msg":"用户已经存在"})
    // 是一个函数调用,把参数填了的函数调用,而函数定义在该html中
    response.end('handel('+str+')');
});

解决方案2使用jquery的getjson:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
<body>
     <div id="div1"></div>
     <button id="btn1">点击使用jquery提交jsonp</button>
</body>
</html>
<script>
    $("#btn1").click(
        function()
        {//getJSON不能像get post ajax请求一样当有返回值时自动调用回调函数,
            // 需要手动调用,见express.js文件
            $.getJSON('http://127.0.0.1:8000/jquery-json-crosszon?callback=?'
            ,function(data)
            {
                  console.log(data.msg);
            }
            )
        }
    )
</script>
app.all('/jquery-json-crosszon', (request, response) => {
    // response.setHeader('Access-Control-Allows-Origin','*');s
    const data =
    {
        exist: 1,
        msg: '用户已经存在'
    };
    // 获得callback参数,
    // 这个参数的值,就是我jquery的第二个参数的函数名,即回调函数
    // 为了能让jquery使用回调函数,我必须手动调用该函数
    let cb=request.query.callback;
    let str = JSON.stringify(data);
    // 返回handel({"exist":1,"msg":"用户已经存在"})
    // 是一个函数调用,把参数填了的函数调用,而函数定义在该html中
    // 比如说函数名是a ,数据是b 拼接出a(b)
    response.end(cb+'('+str+')');
});

解决方案3(推荐,且是官方的):

在服务器中添加一句话:

    response.setHeader('Access-Control-Allow-Origin', '*');

app.get('/server', (request, response) => {
    response.setHeader('Access-Control-Allow-Origin', '*');
    // 设置响应
    var a = { 'a': '10' };
    var b = [1, 2, 3, 4];
    response.send(b);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值