1.3.1.1 QN.ajax

优质
小牛编辑
131浏览
2023-12-01

异步 HTTP 请求

1.1. API 调用

1.1.1. QN.ajax(options)

API 调用入参

参数名类型是否可选默认值含义
optionsObject请求选项
options.urlString请求 URL 地址
options.typeStringoptionaltext响应的类型,可选值: json jsonp text
options.methodStringoptionalGET请求方式,可选值: GET POST
options.contentTypeStringoptionalapplication/x-www-form-urlencoded请求的 Content-Type,指明客户端向服务端发送的数据类型。参考:HTTP Content-Type
options.headersObjectoptional{}请求头
options.dataObject Stringoptionalnull请求携带的数据,必须是 JSON 对象或 query string
options.timeoutNumber Booleanoptionalfalse超时时间,单位:ms,为 false 时表示不考虑超时
options.crossOriginBooleanoptionalfalse请求是否跨域
options.withCredentialsBooleanoptionalfalse对于跨域请求是否携带 Cookie 信息
options.jsonpCallbackStringoptionalcallbackJSONP 请求的回调函数字段的 key,即服务端从此字段中取回调函数名,详细解释见下文
options.jsonpCallbackNameStringoptional由程序自动生成JSONP 请求的回调函数字段的 value,即回调函数名,详细解释见下文
options.successFunctionoptional调用成功的回调函数
options.errorFunctionoptional调用失败的回调函数
jsonpCallbackjsonpCallbackName

当通过 JSONP 形式请求服务端获取数据时,客户端需要告知服务端返回数据时,哪个JS函数将处理这些数据。

例如,请求 http://qianniu.taobao.com/api/todojsonpCallback 的默认值为 callbackjsonpCallbackName 的值为随机生成 reqwest_1494403163219,则实际请求的 URL 是 http://qianniu.taobao.com/api/todo?callback=reqwest_1494403163219

服务端返回结果如下:

reqwest_1494403163219({
    // 数据内容
})

客户端通过预定义名称为 reqwest_1494403163219 的函数等待服务端返回结果,并传入该函数进行下一步的数据处理(回调开发者传入的 success 等)。

但是有时服务端实现的 JSONP 接口所接收的 JSONP 回调函数字段不是 callback,假设为 qianniu_callback,此时开发者在调用接口的时候,就可以传入 jsonpCallback 的值为 qianniu_callback 以进行正确请求。

jsonpCallbackName 一般由程序自动生成,确保 successerror 回调的正确执行,基本不需要修改。当然你也可以根据你自己的规则生成 jsonpCallbackName

API 响应结果

参数名类型是否必须返回含义
result*请求响应

调用示例

// JSON 请求
QN.ajax({
    url: 'http://qianniu.taobao.com/api/todo',
    type: 'json',
    method: 'POST',
    contentType: 'application/json',
    headers: {
        'Accept': 'application/json',
        'X-My-Custom-Header': 'SomethingImportant'
    },
    data: {x: 3, y: 4},
    crossOrigin: true,
    withCredentials: true,
})
.then(result => {
    console.log(result);
})
.catch(error => {
    console.log(error);
});

// JSONP 请求
QN.ajax({
    url: 'http://qianniu.taobao.com/api/todo',
    type: 'jsonp',
    data: {x: 3, y: 4},
    jsonpCallback: 'foo',
    jsonpCallbackName: 'bar',
})
.then(result => {
    console.log(result);
})
.catch(error => {
    console.log(error);
});

// 使用回调函数
QN.ajax({
    url: 'http://qianniu.taobao.com/api/todo',
    type: 'jsonp',
    data: {x: 3, y: 4},
    jsonpCallback: 'foo',
    jsonpCallbackName: 'bar',
    success(result) {
        console.log(result);
    },
    error(error) {
        console.log(error);
    }
});