React-NativeReact Nativern网路请求

React-Native 之 网络请求 fetch

2017-02-14  本文已影响5222人  珍此良辰

前言

网路请求


什么是 fetch


    fetch(url, init)
    .then((response) => {   // 数据解析方式
    })
    .then((responseData) => {       // 获取到的数据处理
    })
    .catch((error) => { // 错误处理
    })
    .done();

译注:

  • body:不可传对象,用JSON.stringify({...})也不可以,在jQuery 中会自动将对象封装成 formData 形式,fetch不会。
  • mode属性控制师傅跨域,其中 same-origin(同源请求,跨域会报error)、no-cors(默认,可以请求其它域的资源,不能访问response内的属性)和 cros(允许跨域,可以获取第三方数据,必要条件是访问的服务允许跨域访问)。
  • 使用 fetch 需要注意浏览器版本,但 React-Native 则不需要考虑。

    fetch(url)
    .then((response) => response.json())        // json方式解析,如果是text就是 response.text()
    .then((responseData) => {   // 获取到的数据处理
    })
    .catch((error) => {     // 错误处理 
    })
    .done();
    

方式一:

    
    fetch(url, {
        method: "POST",
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        }
        body:"key1=value&key2=value…&keyN=value"
    })
    .then((response) => {       // 数据解析方式
    })
    .then((responseData) => {       // 获取到的数据处理
    })
    .catch((error) => { // 错误处理
    })
    .done();
    

方式二:

    let formData = new FormData();
    formData.append("参数", "值");
    formData.append("参数", "值");
    
    fetch(url, {
        method:'POST,
        headers:{},
        body:formData,
        }).then((response)=>{
            if (response.ok) {
                return response.json();
            }
        }).then((json)=>{
            alert(JSON.stringify(json));
        }).catch.((error)=>{
            console.error(error);
        })

译注:

  • application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
  • Fetch 跨域请求的时候默认是不带 cookie 的,如果需要进行设置 credentials:'include'。

获取 HTTP 头信息


    console.log(response.headers.get('Content-Type'));
                        ...
    console.log(response.headers.get('Date'));

综合实例


译注:

  • 下面内容整理自 React-Native 中文网

其他可用网路库


WebSocket

上一篇下一篇

猜你喜欢

热点阅读