2014-05-17 142 views
-5

我需要在我的Javascript中同步调用控制器(url)。我可以用一个Ajax功能做到这一点,像这样:JavaScript/Jquery呼叫控制器synchroneousely

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

我不明白,为什么作为阿贾克斯是异步的定义,我应该使用一个Ajax功能与async:false参数。 $post()也是异步的。

有没有更好的方法?

感谢您的帮助!

+0

我不明白你为什么会使用同步ajax调用吗? – adeneo

+0

所以基本上你会想要一个函数'$ .jax()',默认情况下'async'设置为false? ... – Djizeus

回答

0

看着the documentation of jQuery.ajax(报价):

默认情况下,所有的请求被发送异步 (即此设置为 true默认)。如果您需要 同步请求,请将此选项 设置为false

0

诚然,AJAX stands for Asynchronous Javascript and XML这样就不会异步发送或不使用XML作为数据格式在Javascript中发送的任何请求应当在技术上不能称为一个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); 
} 
+0

谢谢你的完整答案!我现在明白了:-)非常感谢! – user3280526

+0

我看到你没有接受任何你的问题的答案,当你满意答案时考虑这样做:http://stackoverflow.com/help/someone-answers – Djizeus