Как запустить getJSON синхронно? [Дубликат]

на моем ubuntu 14.04, apache 2.4, php 5.5.9 install, я попробовал с sample.php on / var / www / html (root по умолчанию), и он работал нормально. Таким образом, проблема была в моей конфигурации виртуальных серверов. Решение заключалось в том, чтобы включить в директорию def, содержащую .php, следующую строку:

    php_admin_flag engine on
30
задан Praveen Kumar Purushothaman 17 January 2015 в 22:31
поделиться

4 ответа

Asynchronusly означает, что запрос выполняется в фоновом режиме и вызывает вашу функцию, когда она получила ответ. Этот метод лучше всего, если вы хотите получить результат, но разрешите использовать приложение в запросе. Если вы хотите получить прямой ответ, взгляните на запрос синхронизации. этот запрос приостанавливает выполнение сценария до тех пор, пока не получит ответ, и пользователь не сможет ничего сделать, пока не будет получен ответ. Вы можете переключить его через:

async: false,

Так например:

$.ajax({
    url: "myurl",
    async: false,
    ...
})
16
ответ дан Derek Mahar 20 August 2018 в 06:47
поделиться
  • 1
    Я могу просто поставить async: false с $ .getJSON ('get_from_db.php', function (data) {...}); ? Что еще более важно, означает ли синхронизация, что она возобновится (вы говорите, что она приостанавливается), когда происходит изменение базы данных, к которой обращается getJSON? – Fred 22 October 2012 в 11:59
  • 2
    да, это должно сработать. Тогда функция будет вызвана напрямую, а не после задержки. – tobspr 22 October 2012 в 12:00
  • 3
    Я также должен изменить запятую на точку с запятой? $ .get JSON ('get_from_db.php', функция (данные) {async: false,}); не работает. EDIT: он не работает с полуколокой также - async: false; – Fred 22 October 2012 в 12:05
  • 4
    да, потому что это должно быть {async: false} :) в параметрах последний параметр не должен содержать запятую. – tobspr 22 October 2012 в 12:06
  • 5
    Пожалуйста, покажите , где добавьте параметр async: false или покажите пример. – Peter Krauss 13 March 2015 в 22:44

Так как $ .getJSON () использует ajax-конфигурации, просто установите глобальные конфигурации ajax:

// Set the global configs to synchronous 
$.ajaxSetup({
    async: false
});

// Your $.getJSON() request is now synchronous...

// Set the global configs back to asynchronous 
$.ajaxSetup({
    async: true
});
43
ответ дан cchristelis 20 August 2018 в 06:47
поделиться
  • 1
    Отличное решение, ралли любят этот! Спасибо allot, поскольку это устанавливает и отключает переменную и не оставляет Ajax в асинхронном режиме. Работайте блестяще! – ShaunOReilly 22 May 2015 в 13:46
  • 2
    Я бы не использовал глобальный-config-подход, чтобы избежать непредсказуемого поведения. Цитата из jQuery docs: «Мы настоятельно рекомендуем не использовать этот API. Вместо этого задайте параметры явно в вызове или определите простой плагин для этого & quot ;. См. Мой ответ , как это сделать. – R. Oosterholt 8 September 2015 в 19:19
  • 3
    @ R.Oosterholt, лучше всего использовать все команды ajax асинхронно. (В конце концов, это a в ajax.) Но тот факт, что вопрос был задан, и несколько человек нашли это полезным, означает, что есть некоторые случаи, когда это желательно поведение ... – cchristelis 8 September 2015 в 22:57
  • 4
    «лучше всего использовать все аякс-команды асинхронно»; вот почему я, хотя предупреждение / информационное уведомление будет на месте. – R. Oosterholt 9 September 2015 в 06:48

$.getJSON() - сокращенное обозначение для $.ajax(), которое может быть сконфигурировано как синхронное (см. jQuery.getJSON и JQuery.ajax ):

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  async: false, 
  success: function(data) {
      ...
      draw_polygon(data);
  }
});

Попробуйте избежать синхронных вызовов. Цитата из jQuery doc (см. Async prop) :

Запросы междоменного доступа и dataType: запросы «jsonp» не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, пока запрос активен.

Возможно, вы захотите попробовать jQuery Отложить следующим образом:

var jqxhr = $.getJSON(url);
jqxhr.done(function(data) {
    ...
    draw_polygon(data);
});
9
ответ дан R. Oosterholt 20 August 2018 в 06:47
поделиться

$. getJSON (), не принимает конфигурацию, как сказано в документах, это сокращенная версия:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

. Так что просто перепишите свой запрос с точки зрения этого и асинхронный: false будет работать так, как вы ожидаете.

17
ответ дан Robert Moskal 20 August 2018 в 06:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: