получение объекта jQuery $ .load () ajax - PullRequest
1 голос
/ 05 сентября 2011

Как было показано в следующей ссылке, вызов jQuery $ .ajax возвращает объект ajax, который впоследствии можно использовать для прерывания вызова при необходимости.

Прерывание запросов Ajax с использованием jQuery

Мой проект использует $ .load (), который возвращает шаблон объекта, а не объект ajax ($ (""). Load ()).

Есть ли способ, которым я могуполучить объект ajax из $ .load?

1 Ответ

0 голосов
/ 05 сентября 2011

Я не думаю, что вы можете сделать это с текущим API. Но, благодаря открытому исходному коду, взгляните на источник функции load (из jquery-1.6.2.js):

jQuery.fn.extend({
load: function( url, params, callback ) {
    if ( typeof url !== "string" && _load ) {
        return _load.apply( this, arguments );

    // Don't do a request if no elements are being requested
    } else if ( !this.length ) {
        return this;
    }

    var off = url.indexOf( " " );
    if ( off >= 0 ) {
        var selector = url.slice( off, url.length );
        url = url.slice( 0, off );
    }

    // Default to a GET request
    var type = "GET";

    // If the second parameter was provided
    if ( params ) {
        // If it's a function
        if ( jQuery.isFunction( params ) ) {
            // We assume that it's the callback
            callback = params;
            params = undefined;

        // Otherwise, build a param string
        } else if ( typeof params === "object" ) {
            params = jQuery.param( params, jQuery.ajaxSettings.traditional );
            type = "POST";
        }
    }

    var self = this;

    // Request the remote document
    jQuery.ajax({
        url: url,
        type: type,
        dataType: "html",
        data: params,
        // Complete callback (responseText is used internally)
        complete: function( jqXHR, status, responseText ) {
            // Store the response as specified by the jqXHR object
            responseText = jqXHR.responseText;
            // If successful, inject the HTML into all the matched elements
            if ( jqXHR.isResolved() ) {
                // #4825: Get the actual response in case
                // a dataFilter is present in ajaxSettings
                jqXHR.done(function( r ) {
                    responseText = r;
                });
                // See if a selector was specified
                self.html( selector ?
                    // Create a dummy div to hold the results
                    jQuery("<div>")
                        // inject the contents of the document in, removing the scripts
                        // to avoid any 'Permission Denied' errors in IE
                        .append(responseText.replace(rscript, ""))

                        // Locate the specified elements
                        .find(selector) :

                    // If not, just inject the full result
                    responseText );
            }

            if ( callback ) {
                self.each( callback, [ responseText, status, jqXHR ] );
            }
        }
    });

    return this;
}
}

Немного опасным, но работоспособным решением было бы скопировать этот источник и изменить его так, чтобы он возвращал то, что возвращает вызов ajax вместо return this. Это опасно, поскольку может зависеть от внутреннего поведения jquery, которое может измениться без уведомления в будущей версии.

Я бы, вероятно, расширил jQuery.fn новой функцией с другим именем, возможно, loadAjax

Если вы используете другую версию jquery, возьмите ее оттуда.

...