weex的网络请求:stream的fetch

weex用于网络请求的公共对象是stream。stream有个成员函数fetch(),其作用类似ajax。用法如下:

1.    引入stream对象:

var stream = weex.requireModule('stream');

2.    调用stream.fetch()进行请求:

设请求地址是:http://127.0.0.1:8080:MyTest/getTest

参数是:

{
   
parm0: 0,
   
parm1: 'abc'
}

①  get:

var GET_URL = 'http://127.0.0.1:8080:MyTest/getTest?parm0=0&parm1=abc';
stream.fetch({
   
method: 'GET',
   
url: GET_URL,
   
type:'jsonp'
}, function(ret) {
   
console.log(ret);
   
if(!ret.ok) {
       
console.log('get request failed');
    }
else{
       
console.log('get:'+ret);
    }
},
function(response) {
   
console.log(response);
});

②  post:

var POST_URL = 'http://127.0.0.1:8080:MyTest/getTest';
var postBody = 'parm0=0&parm1=abc';
stream.fetch({
   
method: 'POST',
   
url: POST_URL,
   
body: postBody,
   
type:'jsonp'
}, function(ret) {
   
console.log(ret);
   
if(!ret.ok){
       
console.log('post request failed');
    }
else{
       
console.log('post:'+ret);
    }
},
function(response) {
   
console.log(response);
});

注意:

1.   get直接将参数拼接到请求的URL中,get不支持body属性;post将参数放在body中。

2.   post的body属性必须是一个字符串对象,不接受JSON对象,也不接受JSON.stringify()后的JSON对象。该字符串对象的格式与get的参数格式相同,即:'parm0=0&parm1=abc'

3.   对于特殊字符,例如#$%,±,中文等,使用get来发送是不行的,必须使用post发送。

4.   get与post均会对请求结果进行一次封装。服务端返回的数据会被封装到回调的data中。例如上面的回调返回ret,则服务端的返回数据是在ret.data中。

5.   get与post均有两个回调,第一个回调是请求结束后最终的返回结果;第二个回调是请求过程中的请求进度。


有关于跨域访问:

当调用fetch进行请求时,可能会遇到跨域访问的问题。将type由json改为jsonp并不会解决该问题。

该问题主要依赖服务端来解决。若服务端是java,则在controller前加注解:

@CrossOrigin(origins = "*", maxAge =3600)

即可解决。但相应地,安全性会降低。

跨域访问仅会发生在web端。当用安卓调用接口时,相同的代码,不会出现跨域访问问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值