jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 在发送之前放大js解码器和ajax大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,正在努力获得放大解码器.奇怪的问题.如果我有一个附加到我的请求的beforeSend,解码器不会触发.删除beforeSend并解码器触发.

以下是两个例子.

>没有发送.

http://jsfiddle.net/sujesharukil/Td2P4/12/

>使用beforeSend

http://jsfiddle.net/sujesharukil/Td2P4/14/

有人能告诉我发生了什么吗?如果我有一个beforeSend,为什么解码器不会工作?我假设解码器应该在收到请求后触发,所以beforeSend不应该对它产生任何影响!

注意:stackoverflow希望我在这里发布代码,而不仅仅是小提琴

//请检查小提琴

amplify.request({
    resourceId: "testRequest",data: {
        json: JSON.stringify({
            text: 'hello world'
        })
    },success: function(data,status) {
        console.log(data,status);
        $('.messages').append('<div> text retrieved: ' + data.text + '</div>');
    },error: function(status,xhr) {
        console.log(xhr);
    }
});​

救命?

-Suj

解决方法

好吧,想通了.

在放大这个部分引起了我的注意

beforeSend : function( _xhr,_ajaxSettings ) {

                xhr = _xhr;
                ajaxSettings = _ajaxSettings;
                var ret = defnSettings.beforeSend ?
                    defnSettings.beforeSend.call( this,ampXHR,ajaxSettings ) : true;
                return ret && amplify.publish( "request.before.ajax",defnSettings,settings,ajaxSettings,ampXHR );
            }
        });

请注意,如果指定了它将调用beforeSend,否则将var var设置为true

如果设置为true,则会发布“request.before.ajax”

文件中向下,放大侦听此消息

amplify.subscribe( "request.before.ajax",function( resource,ampXHR ) {
var _success = ampXHR.success,_error = ampXHR.error,decoder = $.isFunction( resource.decoder )
        ? resource.decoder
        : resource.decoder in amplify.request.decoders
            ? amplify.request.decoders[ resource.decoder ]
            : amplify.request.decoders._default;

if ( !decoder ) {
    return;
}

function success( data,status ) {
    _success( data,status );
}
function error( data,status ) {
    _error( data,status );
}
ampXHR.success = function( data,status ) {
    decoder( data,status,success,error );
};
ampXHR.error = function( data,error );
};

});

所以,如果你有一个beforeSend,如果它没有返回true,那么该消息永远不会被发布,并且解码器永远不会被击中!

解决方案?

从beforeSend函数返回true

amplify.request.define("testRequest","ajax",{

url: "/echo/json/",dataType: 'json',type: 'POST',decoder: function(data,xhr,error) {
    console.log('decoder fired');
    $('.messages').append('<div>decoder fired </div>');
    success(data);
},beforeSend: function(xhr){
//not doing anything here,just logging;
    console.log('before send fired');
    $('.messages').append('<div>before send fired </div>');
    return true; //this is the key
}

});

奇迹般有效!希望这有助于其他人试图解决这个问题!

大佬总结

以上是大佬教程为你收集整理的jquery – 在发送之前放大js解码器和ajax全部内容,希望文章能够帮你解决jquery – 在发送之前放大js解码器和ajax所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: