2016-09-07 2 views
1

Я прочитал ответы here и here, которые описывают, как читать значение настроек jQuery ajax. Мой вопрос, однако, заключается в следующем: если я ранее вызывал функцию ajaxSetup с настройками, например $.ajaxSetup({cache: true}), а затем я вызываю $.ajaxSetup() (без аргументов), есть ли какие-либо побочные эффекты для этого вызова? Или более прямо, делает вызов $.ajaxSetup() без аргументов ничего делать кроме возврата простого объекта, который содержит настройки для ajax?Вызывает ли jQuery ajaxSetup без параметров какие-либо побочные эффекты?

Ответы, на которые я ссылался выше, оба вызова ajaxSetup таким образом, чтобы прочитать значение параметра, и я не смог найти какой-либо официальный ответ в документах jQuery, которые указывают, что вызывает вызов ajaxSetup без параметров , вероятно, потому, что его использование настолько сильно обескуражено. В моем браузере я проверил простой тест, загрузив jQuery, выполнив $.ajaxSetup({async: false});, а затем $.ajaxSetup(); и обнаружил, что значение async по-прежнему не изменилось (значение по умолчанию равно true, поэтому, если вы вызываете $.ajaxSetup(), сбросьте настройки до значений по умолчанию, тогда значение асинхронного изменения должны быть изменены), но это, вероятно, недостаточно убедительно свидетельствует о том, что побочные эффекты не возникают, когда функция вызывается таким образом.

ответ

1

Вызывает ли $ .ajaxSetup() без аргументов ничего, кроме возврата простого объекта, который содержит настройки для ajax?

Номер

Пример

// set a new custom url 
 
$.ajaxSetup({ 
 
    url: 'CHANGED' 
 
}); 
 

 
// call it again with no params 
 
$.ajaxSetup(); 
 

 
// the url is still the custom url 
 
console.log('url: ' + $.ajaxSetup().url);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Почему?

Если мы посмотрим на code for ajaxSetup, мы видим, что, когда вызывается с одним параметром, она возвращает вызов:

ajaxExtend(jQuery.ajaxSettings, target); 

где target это единственный аргумент, вы перешли в ajaxSetup().

Теперь, внутри ajaxExtend, мы видим, что он пытается перебрать этот же аргумент с помощью цикла for in.

Соответствующий код:

function ajaxExtend(target, src) { 

    for (var key in src) { 
     // here is where target, which in this case is jQuery.ajaxSettings, gets overriden 
    } 

    return target; 
} 

Так как вы ничего не проходит, в основном вы делаете

function ajaxExtend(target, src) { 

    for (var key in undefined) { 
     // this is never reached 
    } 

    return target; 
} 

, который никогда не попадает в петлю for in и возвращает текущее значение jQuery.ajaxSettings.

+0

Ухаживать за нижним нитом? – nem035

+0

ОП здесь, не я, кто ниспроверг. На самом деле, я нахожу ваш ответ очень полезным. Имейте upvote. – vsahu

+0

рад, что вы нашли его полезным помощником – nem035

Смежные вопросы