jquery - 如何更改handleError?

标签 jquery

我有 jquery 脚本,它应该向我的文件发送响应。如果一切顺利,我会成功,但如果错误,我应该得到错误函数,但我得到 jQuery.handleError is not a function jQuery.handleError(s, xml, status, e);

如何将此handleError更改为其他函数?或者我能做什么?

jQuery.extend({

createUploadIframe: function(id, uri)
{
        //create frame
        var frameId = 'jUploadFrame' + id;
        var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';
        if(window.ActiveXObject)
        {
            if(typeof uri== 'boolean'){
                iframeHtml += ' src="' + 'javascript:false' + '"';

            }
            else if(typeof uri== 'string'){
                iframeHtml += ' src="' + uri + '"';

            }   
        }
        iframeHtml += ' />';
        jQuery(iframeHtml).appendTo(document.body);

        return jQuery('#' + frameId).get(0);            
},
createUploadForm: function(id, fileElementId, data)
{
    //create form   
    var formId = 'jUploadForm' + id;
    var fileId = 'jUploadFile' + id;
    var form = jQuery('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');    
    if(data)
    {
        for(var i in data)
        {
            jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
        }           
    }       
    var oldElement = jQuery('#' + fileElementId);
    var newElement = jQuery(oldElement).clone();
    jQuery(oldElement).attr('id', fileId);
    jQuery(oldElement).before(newElement);
    jQuery(oldElement).appendTo(form);



    //set attributes
    jQuery(form).css('position', 'absolute');
    jQuery(form).css('top', '-1200px');
    jQuery(form).css('left', '-1200px');
    jQuery(form).appendTo('body');      
    return form;
},

ajaxFileUpload: function(s) {
    // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout        
    s = jQuery.extend({}, jQuery.ajaxSettings, s);
    var id = new Date().getTime()        
    var form = jQuery.createUploadForm(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data));
    var io = jQuery.createUploadIframe(id, s.secureuri);
    var frameId = 'jUploadFrame' + id;
    var formId = 'jUploadForm' + id;        
    // Watch for a new set of requests
    if ( s.global && ! jQuery.active++ )
    {
        jQuery.event.trigger( "ajaxStart" );
    }            
    var requestDone = false;
    // Create the request object
    var xml = {}   
    if ( s.global )
        jQuery.event.trigger("ajaxSend", [xml, s]);
    // Wait for a response to come back
    var uploadCallback = function(isTimeout)
    {           
        var io = document.getElementById(frameId);
        try 
        {               
            if(io.contentWindow)
            {
                 xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
                 xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;

            }else if(io.contentDocument)
            {
                 xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
                xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
            }                       
        }catch(e)
        {
            jQuery.handleError(s, xml, null, e);
        }
        if ( xml || isTimeout == "timeout") 
        {               
            requestDone = true;
            var status;
            try {
                status = isTimeout != "timeout" ? "success" : "error";
                // Make sure that the request was successful or notmodified
                if ( status != "error" )
                {
                    // process the data (runs the xml through httpData regardless of callback)
                    var data = jQuery.uploadHttpData( xml, s.dataType );    
                    // If a local callback was specified, fire it and pass it the data
                    if ( s.success )
                        s.success( data, status );

                    // Fire the global callback
                    if( s.global )
                        jQuery.event.trigger( "ajaxSuccess", [xml, s] );
                } else
                    jQuery.handleError(s, xml, status);
            } catch(e) 
            {
                status = "error";
                jQuery.handleError(s, xml, status, e);
            }

            // The request was completed
            if( s.global )
                jQuery.event.trigger( "ajaxComplete", [xml, s] );

            // Handle the global AJAX counter
            if ( s.global && ! --jQuery.active )
                jQuery.event.trigger( "ajaxStop" );

            // Process result
            if ( s.complete )
                s.complete(xml, status);

            jQuery(io).unbind()

            setTimeout(function()
                                {   try 
                                    {
                                        jQuery(io).remove();
                                        jQuery(form).remove();  

                                    } catch(e) 
                                    {
                                        jQuery.handleError(s, xml, null, e);
                                    }                                   

                                }, 100)

            xml = null

        }
    }
    // Timeout checker
    if ( s.timeout > 0 ) 
    {
        setTimeout(function(){
            // Check to see if the request is still happening
            if( !requestDone ) uploadCallback( "timeout" );
        }, s.timeout);
    }
    try 
    {

        var form = jQuery('#' + formId);
        jQuery(form).attr('action', s.url);
        jQuery(form).attr('method', 'POST');
        jQuery(form).attr('target', frameId);
        if(form.encoding)
        {
            jQuery(form).attr('encoding', 'multipart/form-data');               
        }
        else
        {   
            jQuery(form).attr('enctype', 'multipart/form-data');            
        }           
        jQuery(form).submit();

    } catch(e) 
    {           
        jQuery.handleError(s, xml, null, e);
    }

    jQuery('#' + frameId).load(uploadCallback   );
    return {abort: function () {}}; 

},

uploadHttpData: function( r, type ) {
    var data = !type;
    data = type == "xml" || data ? r.responseXML : r.responseText;
    // If the type is "script", eval it in global context
    if ( type == "script" )
        jQuery.globalEval( data );
    // Get the JavaScript object, if JSON is used.
    if ( type == "json" )
        eval( "data = " + data );
    // evaluate scripts within html
    if ( type == "html" )
        jQuery("<div>").html(data).evalScripts();

    return data;
}
})

最佳答案

handleError 从 jquery 1.5 及更高版本中已弃用。我从您正在使用的插件切换到这个:http://www.jainaewen.com/files/javascript/jquery/iframe-post-form.html

它更简单,并且很容易将插件修改为您的特定形式。

您可以尝试编写自己的 handleError 函数,如本文所示:When was handleError removed from jQuery?

关于jquery - 如何更改handleError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7866199/

相关文章:

javascript - 遍历 Javascript 对象以构建嵌套列表

jquery - 使用 jQuery 将样式应用于单击元素的所有实例

javascript - 确认提交后如何提交表单? jQuery, Ajax

javascript - Jquery 条件 && 未显示预期结果

javascript - Select2 AJAX 与 JSON

javascript - 在 Chrome 和 Firefox 的 svg 对象内水平对齐 svg 图像

javascript - jQuery 移动特定选项顶部选择的顶部(下拉)

javascript - 在 table 或 div 元素上使用 hasFocus 绑定(bind)

javascript - 在javascript中剪切字符串

javascript - 获取我当前的 URL 并使用 JS 将其插入到 html 中