JavaScript / Jquery呼叫控制器同步

时间:2014-05-17 08:39:18

标签: javascript jquery ajax

我需要在我的Javascript中同步调用控制器(url)。我可以使用像这样的Ajax函数来执行此操作:

$.ajax({
  type: 'POST',
  url: BASE + '/publication/storeWorldCat',
  data: data,
  success: success,
  dataType: dataType,
  async:false
});

我不明白为什么我应该使用带有async:false参数的Ajax函数,因为Ajax根据定义是异步的。 $post()也是异步的。

有更好的方法吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

查看the documentation of jQuery.ajax (引用):

  

默认情况下,会发送所有请求   异步 (即设置为   默认为true。如果你需要   同步请求,设置此选项   到false

答案 1 :(得分:0)

当然,AJAX stands for Asynchronous Javascript and XML所以在Javascript中发送的任何非异步发送的请求或不使用XML作为数据格式的请求在技术上都不应被称为AJAX请求。随着JSON的流行,看起来$.ajax函数 REALLY 命名错误,因为它允许任何数据格式。

但是许多其他缩写词被选中以不完全正确的代价容易发音,我认为我们可以忍受它。所以回答你的问题:

为什么jQuery团队决定将此函数命名为ajax?因为这个首字母缩略词已经被所有人使用,无论使用何种数据格式和“同步性”。为什么每个人都错误地使用这个缩写?可能是因为为每种数据格式创建一个新的首字母缩写词是没有意义的,每次使用可选的“A”表示它是否是异步的。

为什么[你]应该使用带有async:false参数的Ajax函数,因为Ajax根据定义是异步的?

嗯,你没必要:

$.sendRequest = $.ajax

现在,您可以在代码中使用名称更好的函数。您甚至可以更改默认行为:

$.sendRequest = function(options) {
  if (typeof options.async === undefined) {
    options.async = false;
  }
  $.ajax.apply($, arguments);
}