mui ajax跨域请求

mui框架 ajax跨域请求

官方文档

https://dev.dcloud.net.cn/mui/ajax/
mui封装了常用的Ajax函数,支持GET、POST请求方式,支持返回json、xml、html、text、script数据类型; 在mui.ajax方法基础上,mui 进一步简化出最常用的mui.getmui.getJSONmui.post三个方法。

为了在功能和性能间取得更好的平衡,mui.ajax目前实现逻辑如下:

  • App端,跨域情况下,使用plus.net.XMLHttpRequest
  • App端,WKWebview环境,使用plus.net.XMLHttpRequest
  • 其它情况,默认使用window.XMLHttpRequest

注意:plus.net.XMLHttpRequest 必须在 plus ready 事件触发后才能使用。

为适应iOS13起苹果公司将UIWebview列为私有API的问题,从HBuilderX 2.2.5+版本已将iOS上默认内核由UIWebview调整为WKWebview。但WKWebview有更严格的跨域限制,普通xhr或ajax联网会报错:Script error.filename:lineno:0错误;此时必须使用plus.net.XMLHttpRequest,详见:https://ask.dcloud.net.cn/article/36348,所以在WKWebview下,请务必在plus ready后再调用mui.ajax,同时注意也无法再使用浏览器的xhr及jquery的ajax

ajxa请求方法
mui.ajax('http://server-name/login.php',{
    data:{
        username:'username',
        password:'password'
    },
    dataType:'json',//服务器返回json格式数据
    type:'post',//HTTP请求类型
    timeout:10000,//超时时间设置为10秒;
    headers:{'Content-Type':'application/json'},                  
    success:function(data){
        //服务器返回响应,根据响应结果,分析是否登录成功;
    },
    error:function(xhr,type,errorThrown){
        //异常处理;
        console.log(type);
    }
});
最后自己在项目过程中还是无法跨域解决问题,网上搜索资料少。最后通过jsonp方式解决,直接上代码。
mui.ajax('http://127.0.0.1:9341/sys/login', {
      data: {
        userName: username.value,
       password: password.value
      },
      type: 'post', //HTTP请求类型
      timeout: 10000, //超时时间设置为10秒
      dataType: "jsonp",
      jsonp: "jsoncallback",
      async: false,
      success: function(data) {
          console.log("data", data);
          var ja = JSON.parse(data);
          console.log("json_data", ja);
          if (ja.success) {
              mui.toast("登陆成功");
              toIndex();
          } else {
              mui.toast(ja.error.message);
          }
      },
      error: function(xhr, type, errorThrown) {
          mui.toast(type);
      }
}                   

注意:jsonp数据格式,返回数据需要用JSON.parse(data)转换成json格式数据。

你可能感兴趣的:(mui ajax跨域请求)