php jsonp 解析,jsonp的实现

模拟jsonp的实现

测试模拟jsonp的实现

function prescript(s) {

if (s.cache === undefined) {

s.cache = false;

}

if (s.crossDomain) {

s.type = "GET";

}

}

function prejsonp(s, originalSettings, jqXHR) {

// 给回调函数命名

var callbackName = s.jsonpCallback

s.url += (/(?:)/.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;

// 脚本执行后使用数据转换器来检索json

// 提供给代码获取服务器的是据

s.getData = function() {

if (!responseContainer) {

jQuery.error(callbackName + " was not called");

}

return responseContainer[0];

};

//修改处理机制

s.dataTypes[0] = "json";

// 创建一个全局函数

overwritten = window[callbackName];

//用来收集服务器给的数据

window[callbackName] = function() {

responseContainer = arguments;

};

return "script";

}

/**

* jsonp的预先处理

*/

function inspectPrefiltersOrTransportsA(options, originalOptions, jqXHR) {

//预处理jsonp

var dataTypeOrTransport = prejsonp(options, originalOptions, jqXHR)

//扩充dataTypes

options.dataTypes.unshift(dataTypeOrTransport);

//预处理script类型

prescript(options)

}

/**

* 分发器

* @return {[type]} [description]

*/

function inspectPrefiltersOrTransportsB(s, originalOptions, jqXHR) {

return {

send: function(_, complete) {

var script = jQuery("

async: true,

charset: s.scriptCharset,

src: s.url

}).on(

"load error",

callback = function(evt) {

script.remove();

callback = null;

if (evt) {

complete()

}

}

);

//

url = undefined;

}

options = options || {};

/**

* 参数

* jQuery.ajaxSetup 是默认参数

* @type {[type]}

*/

var s = jQuery.ajaxSetup({}, options);

// Deferreds

// 异步机制

var deferred = jQuery.Deferred();

var completeDeferred = jQuery.Callbacks("once memory");

/**

* 实际返回的ajax对象

* @type {Object}

*/

var jqXHR = {}

// 把jqXHR对象转化promise对象,幷加入complete、success、error方法

deferred.promise(jqXHR).complete = completeDeferred.add;

//别名

jqXHR.success = jqXHR.done;

jqXHR.error = jqXHR.fail;

s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().match(/(?:)/) || [""];

//预处理

inspectPrefiltersOrTransportsA(s, options, jqXHR);

for (i in {

success: 1,

error: 1,

complete: 1

}) {

jqXHR[i](s[i]);

}

/**

* 分发器

*/

transport = inspectPrefiltersOrTransportsB(s, options, jqXHR);

function done(status, nativeStatusText, responses, headers) {

console.log(s,s.getData())

}

//发送请求

transport.send(s, done);

return jqXHR;

}

function show(data){

$('body').append('

'+ data +'');

}

/**

* 数据回调接收

* @return {[type]} [description]

*/

function flightHandler(){

}

$("#test").click(function(){

//执行一个异步的HTTP(Ajax)的请求。

var ajax = createAjax({

url: 'http://192.168.1.113:8080/github/jQuery/jsonp.php',

data: {

'action': 'aaron'

}, // 预传参的数组

dataType: 'jsonp', // 数据类型

jsonp: 'callback', // 指定回调函数名,与服务器端接收的一致,并回传回来

jsonpCallback:flightHandler,

success: function() {

show('局部事件success')

}

})

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值