dreamboycx
dreamboycx
  • 发布:2016-08-12 17:11
  • 更新:2016-09-06 13:16
  • 阅读:5905

MUI的ajax方法太弱了,不支持ajax的跨域,如之奈何?

分类:MUI

我现在使用的是MUI的2.9版本,我们使用MUI很多时候都是请求接口跨域的,也许官方考虑了打包成APP可以跨域,但是忽略了我们很多是做WEB页面出身的,喜欢MUI的精简和快速,所以我做webAPP时经常第一时间想到MUI,在处理跨域问题上,我以前都是使用jquery的JSONP来解决跨域,现在使用mui.ajax()方法,官方文档里没给出是否可以使用jsonp,自己尝试试了下,向服务端post方式来传用户名和密码,依然显示是不让跨域,百度了N多,在本网站也看了N多,也是找不到答案,官方说的费了老大劲以毫秒级别来提升MUI运行速度,强烈不建议引入jquery,但是跨域这个常见的问题不能解决,实在没办法ajax请求数据,实在无奈,只得引入jquery来解决跨域问题,希望官方下一个mui版本能扩大Ajax能像jquery的ajax那么强大,而且现在WebAPP那么流行,实在应该出一款纯web的MUI版本,不知道我有生之年能不能看到呢。。。。。。。

2016-08-12 17:11 负责人:无 分享
已邀请:

最佳回复

赵梦欢

赵梦欢 - 专注前端,乐于分享!

普通浏览器跨域需要服务器端支持,mui中jsonp使用方法如下:

<!doctype html>  
<html>  
    <head>  
        <meta charset="UTF-8">  
        <title></title>  
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
        <link href="css/mui.min.css" rel="stylesheet" />  
    </head>  
    <body>  
            <button id="btn" type="button" class="mui-btn mui-btn-blue mui-btn-block">按钮</button>  
        <script src="js/mui.min.js"></script>  
        <script src="js/mui.jsonp.js" type="text/javascript" charset="utf-8"></script>  
        <script type="text/javascript">  
            mui.init()  
            // http://fanyi.youdao.com/openapi.do?keyfrom=xqnblog&key=1828999753&type=data&doctype=json&version=1.1&q=good  

            var url = 'http://fanyi.youdao.com/openapi.do?keyfrom=xqnblog&key=1828999753&callback=?'  
            document.querySelector('#btn').addEventListener('click',function () {  
                mui.getJSON(url,{  
                    only:"translate",  
                    type:"data",  
                    doctype:"jsonp",  
                    version:"1.1",  
                    q: 'good'  
                },function(rs){  
                    alert("res:"+JSON.stringify(rs));  
                });       
            })  
        </script>  
    </body>  
</html>
Danny

Danny - QQ125904483

不知道是谁太弱了。。。。

  • dreamboycx (作者)

    你很强,但请指出怎么做?如果不行,就请移尊别处,我说的是纯web,请不要说APP可以。。。

    2016-08-15 19:50

  • Danny

    pc浏览器安全级别高,跨域请求会先发送options嗅探请求,获得权限了才可以继续跨域请求。

    2016-08-15 21:32

  • 我是谁啊

    回复 Danny:傻逼

    2019-01-26 14:44

lsvih

lsvih

请求页写<meta http-equiv="Access-Control-Allow-Origin" content="">
<meta http-equiv="content-security-policy">

后端设置header('Access-Control-Allow-Origin:*');

  • dreamboycx (作者)

    试了,但是没有效果,服务端是java。。。。。

    2016-08-12 17:19

  • lsvih

    回复 dreamboycx:那就是后端的锅。别一跨域就用jsonp.

    2016-08-12 17:20

  • dreamboycx (作者)

    回复 lsvih:那几个关于跨域的header头在服务端都设置了

    2016-08-12 17:22

  • lsvih

    回复 dreamboycx:..那就可以跨域

    2016-08-12 17:24

merb_tu

merb_tu

同情楼主

好冷

好冷 - 诚接外包,QQ:23380891

同情楼主

烟雨

烟雨

不对啊 我之前看了很多 都是说post情况下没法用jsonp

  • 赵梦欢

    是的,jsonp的原理其实是利用script src属性可以跨域来实现请求的,说白了是和后台配合,后台返回一个函数调用,刚好前台定义了一个同名的函数。

    2016-09-06 13:28

  • 烟雨

    那么 post的情况下 如何去处理跨域问题呢 我之前去了很多论坛 都没给出解决方案

    2016-09-06 13:35

  • merb_tu

    Ajax之所以不能跨域是因为浏览器不允许跨域。要解除这个限制,要给ajax中添加"Access-Control-Allow-Origin : * "请求头,同时,服务器端也要允许跨域请求。

    2016-10-20 00:47

该问题目前已经被锁定, 无法添加新回复