< stream > 模块 #53

Open
TiaossuP opened this Issue Jul 24, 2016 · 29 comments

Projects

None yet
@TiaossuP
TiaossuP commented Jul 24, 2016 edited

原文在这

概述

以下为stream相关的API,用于实现网络请求。

API

fetch(options, callback[,progressCallback])

参数

  • options(object): 请求的一些选项.
    • method(string): HTTP方法: GET或是POST.
    • url(string): 请求的URL.
    • headers(object): HTTP请求头.
    • type(string): 请求类型, 'json','text' 或是 'jsonp'(在原生实现中其实与json相同)
    • body(string): HTTP请求体.
  • callback(function): 响应结果回调,回调函数将收到如下的response对象:
    • status(number):返回的状态码.
    • ok(boolean): 如果状态码在200~299之间就为真。
    • statusText(string):状态描述文本
    • data: 返回的数据,如果请求类型是jsonjsonp,则它就是一个 object ,如果不是,则它就是一个 string 。
    • headers(object): 响应头
  • progressCallback(function): 关于请求状态的回调。 这个回调函数将在请求完成后就被调用:
    • readyState(number): 当前状态
      state.'1':请求连接中
      opened;'2':返回响应头中
      received.;'3':正在加载返回数据
    • status(number):响应状态码.
    • length(number): 已经接受到的数据长度. 你可以从响应头中获取总长度
    • statusText(string):状态文本
    • headers(object): 响应头

示例

stream.fetch({
    method: 'GET',
    url: "http://httpbin.org/get",
    type:'json'
}, function(response) {
    //process response
},function(response){
    console.log("bytes received:"+response.length);
});
@tmyk104117

你好,直接使用示例代码后,会有错误 Can't find variable: stream,是什么原因呢?

@Danielpog

@tmyk104117 应该是没有引入stream组件吧,用require引入试试

@nisang
nisang commented Aug 16, 2016

官方没有说明stream模块组件具体在哪个组件里。使用npm install weex-module/stream是失败的。在npm中查找(https://www.npmjs.com/search?q=weex&page=1)是没有的。

@FF-Zack
FF-Zack commented Aug 17, 2016

var stream = require('@weex-module/stream');
代码上面加这一句就可以了。

@Lurkyli
Lurkyli commented Sep 1, 2016

stream可以支持https协议么?

@colys
colys commented Sep 24, 2016

测试了一下,stream不会自动带cookie,有什么办法么?

@coolMan2015

在IOS里stream请求的返回状态是status=-1 是什么原因?

@acton393
acton393 commented Sep 25, 2016 edited

@coolMan2015 status 为 -1 应该是有出现错误,
有两种情况:

  1. 你调用stream.fetch 的时候没有填写请求的url, 这个情况暂时还没有打error Description,我们后面修复,也欢迎你提一下PR完善 source code
  2. 请求过程中出现错误 source code

具体,你可以把整个response jsonstr 打出来, 看下是为啥出错了,

@coolMan2015

{"status":"-1",data:"unsupportedURL(-1002)","statusText":"ERR_INVALID_REQUEST"}
这是返回的信息

@continue0511

这个文档能不能的详细点,这写的什么玩意

@jieshadow

有没有人知道要是拿到数据之后怎么解析吗?

@tuzi8080808080

文档写的太差了吧

@coolMan2015

返回的是一段JSON数据如上,如果成功取到了,data里就是你后台返回的内容

@jieshadow

我想问一下,按照这个列子写了 ,为啥返回的是【object,object】,不是json串

@wzj583585700

stream.fetch({
method: 'POST',
url: "http://ejlian.cn/interface/home/list",
type:'json',
body: {offset:'0',max:'1'}
}, function(response) {
me.getJsonpResult=JSON.stringify(response.data);
console.log(response.data)

      },function(error){
          console.log('get jsonp in progress:'+response.length);
          me.getJsonpResult = "bytes received:"+response.length;

      });参数是这样传吗
@wzj583585700

太坑了

@TBXark
TBXark commented Nov 13, 2016

增加 headers 一直失败


     stream.sendHttp({
         method: 'GET',
         url: url,
         headers: {token: `SomeString`},
     }, function (ret) {
         var retdata = JSON.parse(ret);
         callback(retdata);
     });

@xiaomanzijia

stream.fetch({
method: ‘GET’,
url: 'http://news.m.5173.com/news/ad?version=1&devicetype=iphone',
type:‘jsonp’
}, function(ret) {
if(!ret.ok){
me.getJsonpResult = “request failed”;
}else{
me.getJsonpResult = JSON.stringify(ret.data);
console.log(‘get JSONP:’+me.getJsonpResult);
}
},function(response){
console.log(‘get jsonp in progress:’+response.length);
me.getJsonpResult = “bytes received:”+response.length;
});
这个地址的jsonp数据为什么请求不到?

@cuanhanshansi

me.getJsonpResult未定义@xiaomanzijia

@acton393

hi @xiaomanzijia 哪个平台报啥错了.. ,现在JSONP是支持的

@jxjxwujie

iOS在控制台输出:stream.sendHttp is not a function. (In 'stream.sendHttp({
method: 'GET',
url: url
}, function (ret) {
callback(JSON.parse(ret));
})', 'stream.sendHttp' is undefined)
但是我手动刷新一次页面的时候就有数据了
var stream = require('@weex-module/stream');
function getData(url, callback) {
stream.sendHttp({
method: 'GET',
url: url
}, function (ret) {
callback(JSON.parse(ret));
});
}; 这是源代码。。。这是为什么啊

@DoranYun
DoranYun commented Dec 9, 2016

@tmyk104117

不好意思,该示例中的代码不全,应该先加入 var stream = require('@weex-module/stream') || {} 才行。
可参考最新版文档: http://alibaba.github.io/weex/cn/doc/modules/stream.html

@DoranYun
DoranYun commented Dec 9, 2016

@Lurkyli 支持https。
可参考最新版文档示例: http://alibaba.github.io/weex/cn/doc/modules/stream.html

@DoranYun
DoranYun commented Dec 9, 2016

@colys Hi,目前暂时不支持 cookie,如果你需要在本地存储信息可通过 Storage module

@DoranYun
DoranYun commented Dec 9, 2016

@jieshadow
可通过 res.data 获取数据并解析
可参考最新版文档示例: http://alibaba.github.io/weex/cn/doc/modules/stream.html

@lmh0921
lmh0921 commented Dec 18, 2016

使用body传参然后浏览器就会报跨域访问错误,不使用body传参就没问题,到底要怎样传参?使用了body呗浏览器挡住了,然后status为-1,怎么回事?文档也不清楚

@lmh0921
lmh0921 commented Dec 18, 2016 edited

created:function () {
var self = this
stream.fetch({
method: 'GET',
headers:{
'apikey':'deaa5742c4fa6856c33309d63aefba4c'
},
url: 'http://apis.baidu.com/tngou/cook/show',
body:{
'id':29643
},
type: 'json'
}, function (ret) {。。。。。。

这个就不行,浏览器挡住了,显示什么:XMLHttpRequest cannot load http://apis.baidu.com/tngou/cook/show?id=29643. Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

@mxdios
mxdios commented Jan 6, 2017

@acton393 求大神指教,res.status = -1,res.ok = falst,请问是什么原因?请求地址是:http://api.maoyan.com/mmdb/movie/v3/list/hot.json

@DoranYun
DoranYun commented Jan 9, 2017

@lmh0921 你是 GET 请求,传参需要通过url传递。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment