5.1.0 • Published 4 years ago

zan-pc-ajax v5.1.0

Weekly downloads
11
License
MIT
Repository
-
Last release
4 years ago

zan-pc-ajax

用于 PC 端的 ajax 请求库, 基于 Promiseajax 实现,支持 browser 和 node 环境,jsonp 不支持 node。

使用时请确保存在全局的Promise实现。推荐 es6-promise

zan-ajax的关系

zan-ajax 是通用的包,不包含任何业务相关的处理逻辑(比如对非零 code 的处理),zan-pc-ajax 是在 zan-ajax 基础上加上了 PC 端的业务逻辑。

PC 端都应该使用这个库来发请求。

代码演示

import ajax from "zan-pc-ajax";

// get
ajax({
  url: "http://youzan.com/some.json",
  data: {
    quux: 2,
  },
})
  .then((data) => {})
  .catch((msg) => {});

// post
ajax({
  url: "http://youzan.com/some.json",
  method: "POST",
  data: {
    foobar: 1,
  },
});

// 通过 rawResponse 获取请求的原始数据
ajax({
  url: "http://youzan.com/some.json",
  data: {
    quux: 2,
  },
  rawResponse: true,
})
  .then((resp) => {
    const { code, data } = resp;
  })
  .catch((resp) => {
    const { code, msg } = resp;
  });

// jsonp
ajax({
  url: "http://youzan.com/some.jsonp",
  dataType: "jsonp",
  data: {
    foobar: 2,
  },
});

// Node 端假如需要处理一些 Java 的长整数类型的 JSON 字段,可以使用 allowBigNumberInJSON 将这些数字存储为字符串
ajax({
  url: "http://youzan.com/some-java-api-with-long-long-in-json",
  allowBigNumberInJSON: true,
});

API

函数原型 ajax(ajaxOptions): Promise

ajaxOptions 是请求的参数。返回值是一个 Promise,请求成功会 resolve,请求失败会 reject

ajax

参数说明类型默认值备选值是否必填
url请求的地址string
method请求的类型stringGETGET | HEAD | POST | DELETE | PUT | PATCH
data请求的参数,GET / HEAD类请求会作为 URL 参数,POST | PUT等请求会作为bodyobject
contentType发送给服务器的数据类型stringPOST | PUT | DELETE | PATCH 请求默认值为 'application/x-www-form-urlencoded; charset=UTF-8'
dataType请求的返回值类型string'json'jsonp | arraybuffer | blob | document | json | text | stream
headersHTTP 请求的头object{ 'X-Requested-With': 'XMLHttpRequest' }
noXRequestedWithHeader是否强制加上X-Requested-With这个头,这个头会触发 CORS preflight,默认为 true, 不带这个头,设为 false 的话会强制加上这个头booltruetrue | false
withCredentialsindicates whether or not cross-site Access-Control requests should be made using credentialsboolfalsefalse | true
usernameHTTP 请求的用户名string
passwordHTTP 请求的密码string
timeout请求的超时时间,0 表示没有超时number10000
onUploadProgress上传请求的进度回调函数,参数是 progressEventfunc
onDownloadProgress下载请求的进度回调函数,参数是 progressEventfunc
cancelToken用来取消请求的 token,具体请看下面的取消请求文档CancelToken
rawResponse如果为true的话,resolvereject的参数会是服务器返回的原始数据boolfalsetrue | false
allowBigNumberInJSON如果为 true 的话,使用 zan-json-parse 来解析 JSON,这个 parser 会把一些浮点数无法表示的数字存储为字符串。一般在 node 后端项目里需要用到这个。boolfalsetrue | false
disableCsrfToken如果为 true 的话,不会自动将 csrf_token 加到请求体里面boolfalsetrue | false
csrfMode用于配置 csrf_token 放在 http 请求中的位置 配置为 'node' csrf_token 将通过请求头 headers['csrf-token'] 传输 配置为'iron' csrf_token 将通过请求体 data[csrf_token] 传输string'node''node' | 'iron'

jsonp

dataTypejsonp 的时候这些参数有效。

参数说明类型默认值备选值是否必填
url请求的地址string
data请求的参数,作为 url 参数发送object
jsonpJSONP请求的回调参数名称, callback=__jp01中的callback部分string'callback'
jsonpCallbackJSONP请求的回调函数名,如果是函数则使用函数的返回值,callback=__jp01中的__jp01部分string | function每次请求都生成一个不一样的字符串
prefixJSONP 请求回调函数名字的前缀,callback=__jp01中的__jp部分,后面的部分会用随机字符串填充string'__jp'
timeout请求的超时时间,0 表示没有超时number10000
cache浏览器缓存策略,设置为false,会强制浏览器不缓存请求boolfalsetrue | false
rawResponse如果为true的话,resolvereject的参数会是服务器返回的原始数据boolfalsetrue | false

rawResponse 的说明

// 对于下面这个请求返回值
// rawResponse为true,resolve/reject拿到的是后端返回的原始数据
// rawResponse为false, resolve拿到的是data字段下的值;reject拿到的是msg下的值
{
  "code": 0,
  "msg": "",
  "data": {
    "id": "63077",
    "shop_id": "63077",
    "team_name": "\u8d77.\u7801\u8fd0\u52a8\u9986a",
  }
}

取消请求

使用 ajax 上的 CancelToken 创建 token,有两种使用方式。

不同的请求可以使用同一个 token,调用这个 token 的 cancel 方法时会同时取消所有使用这个 token 的请求。

jsonp 请求不支持取消操作。

var CancelToken = ajax.CancelToken;
var source = CancelToken.source();

ajax({
  url: "/user/12345",
	cancelToken: source.token,
	
	// 使用 isCancel 必须是  rawResponse 模式
	// 只是使用 source.cancel 的话则没有这个限制
  rawResponse: true,
}).catch(function (thrown) {
  if (ajax.isCancel(thrown)) {
    console.log("Request canceled", thrown.message);
  } else {
    // handle error
  }
});

// cancel the request (the message parameter is optional)
source.cancel("Operation canceled by the user.");
var CancelToken = ajax.CancelToken;
var cancel;

ajax({
  url: "/user/12345",
  cancelToken: new CancelToken(function executor(c) {
    // An executor function receives a cancel function as a parameter
    cancel = c;
  }),
});

// cancel the request
cancel();

URL 参数序列化

内部使用的序列化函数等价于 jQuery.param(value, false)

多域名支持

为了支持多域名请求 Host,默认从 runtime 中获取由 pc-shared 下发的 zan-pc-ajax,兜底使用原始 Ajax。

使用者无需感知这个改动,正常引用就好。如果需要强制使用非 runtime 版本,可以 import { rawPcAjax } from 'zan-pc-ajax' 导入原始 Ajax(99.99% 没有使用的场景)。

5.1.0

4 years ago

4.7.0

4 years ago

5.0.2

4 years ago

5.0.1

4 years ago

4.6.2

4 years ago

5.0.0-beta.0

5 years ago

6.0.0-beta.0

5 years ago

4.6.1

6 years ago

4.6.0

7 years ago

4.5.1

7 years ago

5.0.0

7 years ago

4.5.0

7 years ago

4.4.0

7 years ago

4.4.0-beta1

7 years ago

4.3.2

7 years ago

4.3.1

7 years ago

4.3.0

7 years ago

4.3.0-beta5

7 years ago

4.3.0-beta4

7 years ago

4.3.0-beta3

7 years ago

4.3.0-beta2

7 years ago

4.3.0-beta1

7 years ago

4.2.0

7 years ago

4.2.0-beta1

7 years ago

4.1.7

7 years ago

4.1.6

7 years ago

4.1.5

7 years ago

4.1.4

8 years ago

4.1.3

8 years ago

4.1.3-beta1

8 years ago

4.1.2

8 years ago

4.1.1

8 years ago

4.1.0

8 years ago

4.0.6

8 years ago

4.0.5

8 years ago

4.0.4

8 years ago