mirror of
https://github.com/silkimen/cordova-plugin-advanced-http.git
synced 2026-01-31 00:00:03 +08:00
feature #253: add support for response type "json"
This commit is contained in:
@@ -7,14 +7,15 @@ var pluginId = module.id.slice(0, module.id.lastIndexOf('.'));
|
||||
var exec = require('cordova/exec');
|
||||
var base64 = require('cordova/base64');
|
||||
var messages = require(pluginId + '.messages');
|
||||
var errorCodes = require(pluginId + '.error-codes');
|
||||
var globalConfigs = require(pluginId + '.global-configs');
|
||||
var jsUtil = require(pluginId + '.js-util');
|
||||
var ToughCookie = require(pluginId + '.tough-cookie');
|
||||
var lodash = require(pluginId + '.lodash');
|
||||
var WebStorageCookieStore = require(pluginId + '.local-storage-store')(ToughCookie, lodash);
|
||||
var cookieHandler = require(pluginId + '.cookie-handler')(window.localStorage, ToughCookie, WebStorageCookieStore);
|
||||
var helpers = require(pluginId + '.helpers')(jsUtil, cookieHandler, messages, base64);
|
||||
var helpers = require(pluginId + '.helpers')(jsUtil, cookieHandler, messages, base64, errorCodes);
|
||||
var urlUtil = require(pluginId + '.url-util')(jsUtil);
|
||||
var publicInterface = require(pluginId + '.public-interface')(exec, cookieHandler, urlUtil, helpers, globalConfigs);
|
||||
var publicInterface = require(pluginId + '.public-interface')(exec, cookieHandler, urlUtil, helpers, globalConfigs, errorCodes);
|
||||
|
||||
module.exports = publicInterface;
|
||||
|
||||
9
www/error-codes.js
Normal file
9
www/error-codes.js
Normal file
@@ -0,0 +1,9 @@
|
||||
module.exports = {
|
||||
GENERIC: -1,
|
||||
SSL_EXCEPTION: -2,
|
||||
SERVER_NOT_FOUND: -3,
|
||||
TIMEOUT: -4,
|
||||
UNSUPPORTED_URL: -5,
|
||||
NOT_CONNECTED: -6,
|
||||
POST_PROCESSING_FAILED: -7,
|
||||
};
|
||||
@@ -1,9 +1,9 @@
|
||||
module.exports = function init(jsUtil, cookieHandler, messages, base64) {
|
||||
module.exports = function init(jsUtil, cookieHandler, messages, base64, errorCodes) {
|
||||
var validSerializers = ['urlencoded', 'json', 'utf8'];
|
||||
var validCertModes = ['default', 'nocheck', 'pinned', 'legacy'];
|
||||
var validClientAuthModes = ['none', 'systemstore', 'buffer'];
|
||||
var validHttpMethods = ['get', 'put', 'post', 'patch', 'head', 'delete', 'upload', 'download'];
|
||||
var validResponseTypes = ['text','arraybuffer', 'blob'];
|
||||
var validResponseTypes = ['text', 'json', 'arraybuffer', 'blob'];
|
||||
|
||||
var interface = {
|
||||
b64EncodeUnicode: b64EncodeUnicode,
|
||||
@@ -234,30 +234,43 @@ module.exports = function init(jsUtil, cookieHandler, messages, base64) {
|
||||
}
|
||||
}
|
||||
|
||||
function injectRawResponseHandler(responseType, cb) {
|
||||
function injectRawResponseHandler(responseType, success, failure) {
|
||||
return function (response) {
|
||||
var dataType = jsUtil.getTypeOf(response.data);
|
||||
|
||||
// don't need post-processing if it's already binary type (on browser platform)
|
||||
if (dataType === 'ArrayBuffer' || dataType === 'Blob') {
|
||||
return cb(response);
|
||||
return success(response);
|
||||
}
|
||||
|
||||
// arraybuffer
|
||||
if (responseType === validResponseTypes[1]) {
|
||||
var buffer = base64.toArrayBuffer(response.data);
|
||||
response.data = buffer;
|
||||
}
|
||||
try {
|
||||
// json
|
||||
if (responseType === validResponseTypes[1]) {
|
||||
response.data = JSON.parse(response.data);
|
||||
}
|
||||
|
||||
// blob
|
||||
if (responseType === validResponseTypes[2]) {
|
||||
var buffer = base64.toArrayBuffer(response.data);
|
||||
var type = response.headers['content-type'] || '';
|
||||
var blob = new Blob([ buffer ], { type: type });
|
||||
response.data = blob;
|
||||
}
|
||||
// arraybuffer
|
||||
else if (responseType === validResponseTypes[2]) {
|
||||
response.data = base64.toArrayBuffer(response.data);
|
||||
}
|
||||
|
||||
cb(response);
|
||||
// blob
|
||||
else if (responseType === validResponseTypes[3]) {
|
||||
var buffer = base64.toArrayBuffer(response.data);
|
||||
var type = response.headers['content-type'] || '';
|
||||
var blob = new Blob([ buffer ], { type: type });
|
||||
response.data = blob;
|
||||
}
|
||||
|
||||
success(response);
|
||||
} catch (error) {
|
||||
failure({
|
||||
status: errorCodes.POST_PROCESSING_FAILED,
|
||||
error: messages.POST_PROCESSING_FAILED + ' ' + error.message,
|
||||
url: response.url,
|
||||
headers: response.headers
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,4 +16,5 @@ module.exports = {
|
||||
INVALID_TIMEOUT_VALUE: 'advanced-http: invalid timeout value, needs to be a positive numeric value',
|
||||
MANDATORY_FAIL: 'advanced-http: missing mandatory "onFail" callback function',
|
||||
MANDATORY_SUCCESS: 'advanced-http: missing mandatory "onSuccess" callback function',
|
||||
POST_PROCESSING_FAILED: 'advanced-http: an error occured during post processing response:',
|
||||
};
|
||||
|
||||
@@ -1,13 +1,4 @@
|
||||
module.exports = function init(exec, cookieHandler, urlUtil, helpers, globalConfigs) {
|
||||
var ErrorCode = {
|
||||
Generic: -1,
|
||||
SslException: -2,
|
||||
ServerNotFound: -3,
|
||||
Timeout: -4,
|
||||
UnsupportedUrl: -5,
|
||||
NotConnected: -6,
|
||||
};
|
||||
|
||||
module.exports = function init(exec, cookieHandler, urlUtil, helpers, globalConfigs, errorCodes) {
|
||||
var publicInterface = {
|
||||
getBasicAuthHeader: getBasicAuthHeader,
|
||||
useBasicAuth: useBasicAuth,
|
||||
@@ -38,7 +29,7 @@ module.exports = function init(exec, cookieHandler, urlUtil, helpers, globalConf
|
||||
head: head,
|
||||
uploadFile: uploadFile,
|
||||
downloadFile: downloadFile,
|
||||
ErrorCode: ErrorCode
|
||||
ErrorCode: errorCodes
|
||||
};
|
||||
|
||||
function getBasicAuthHeader(username, password) {
|
||||
@@ -155,7 +146,7 @@ module.exports = function init(exec, cookieHandler, urlUtil, helpers, globalConf
|
||||
var headers = helpers.getMergedHeaders(url, options.headers, globalConfigs.headers);
|
||||
|
||||
var onFail = helpers.injectCookieHandler(url, failure);
|
||||
var onSuccess = helpers.injectCookieHandler(url, helpers.injectRawResponseHandler(options.responseType, success));
|
||||
var onSuccess = helpers.injectCookieHandler(url, helpers.injectRawResponseHandler(options.responseType, success, failure));
|
||||
|
||||
switch (options.method) {
|
||||
case 'post':
|
||||
|
||||
Reference in New Issue
Block a user