Глобальные данные $ .ajaxSetup не объединяются в функции загрузки - PullRequest
2 голосов
/ 18 октября 2011

Я хотел бы установить глобальный параметр данных для всех моих запросов ajax

$.ajaxSetup({
   data: {hash : "12345"}
});

после установки этого я вызываю:

var myData = {
    name : "John",
    age : "28"
}

$.get(url, myData, function(data){
    ...
});

это работает нормально и добавляет все 3 параметра (хэш, имя, возраст) для запроса данных, но когда я вызываю функцию load вместо get, она не работает, и я получаю только 2 параметра (имя, возраст):

$("#my_div").load(url, myData, function(data){
    ...
});

, пожалуйста, кто-нибудь может мне сказать, почему этоне работает для функции загрузки?У меня много приложений с функцией загрузки в моем приложении, и я не хочу менять нагрузку на get

спасибо за каждый совет!

Ответы [ 2 ]

4 голосов
/ 18 октября 2011

Это можно считать ошибкой в ​​jQuery;или, по крайней мере, они должны признать, что интерфейс между их методами AJAX несовместим.

Единственный способ исправить это - использовать jQuery.extend для объединения значения по умолчанию data с data you 'Мы предоставляем:

jQuery.extend(myData, jQuery.ajaxSettings);

Перед выполнением запроса.

Как это ошибка:

load конвертирует data объект в строку перед , передаваемый в базовый метод jQuery.ajax, где get не .

Из-за этого,когда ajaxExtend создает объект data, в сценарии load параметр data устанавливается в строку, тогда как при get объект data равен merged с jQuery.ajaxSettings.

0 голосов
/ 18 октября 2011

Если вы посмотрите на .load, вы увидите, что он не передает объект в .ajax, даже если вы передаете один в .load:

    if ( params ) {

        ...

        } else if ( typeof params === "object" ) {

            // it will execute this

            params = jQuery.param( params, jQuery.ajaxSettings.traditional );

Он вызовет jQuery.params, который возвращает строку , и объект не может быть объединен со строкой. Таким образом, он отправит "name=John&age=28" без объединения хеш-объекта.

Это не относится к $.get, потому что эта функция напрямую передает объект:

jQuery.each( [ "get", "post" ], function( i, method ) {
    jQuery[ method ] = function( url, data, callback, type ) {

        ...

        return jQuery.ajax({
            type: method,
            url: url,
            data: data,         // passed directly to $.ajax which takes care of merging $.ajaxSetup stuff
            success: callback,
            dataType: type
        });
    };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...