2012-08-31 73 views
6

Ajax使用回调,因为它是A同步。如何阻止Ajax调用(我希望它阻止)

我希望我的电话到远程URL块,直到有一些答案,正如在Ajax中一样,但没有异步部分,或者我应该说我想做一个JAX调用。

有什么技术,使下面的发生(用了jQuery)(...使用jQuery或任何其他解决方案):

function get_data() { 
    $.ajax({ 
     type : "POST", 
     url : "/foo" 
    }).done(function(data, textStatus, jqXHR) { 
     return data; 
    }).fail(function(jqXHR, textStatus) { 
     return null; 
    }); 
} 

var data = get_data(); 
// process `data` 

我只是想知道 - 想学。

其实有些时候阻塞,直到答复将适合罚款。我并不是说我想让浏览器阻塞,只是脚本运行时。

+0

写'异步:FALSE'使用Ajax选项 – diEcho

+0

jQuery的$就具有'async'财产。如果将其设置为false,则会阻止。 – osoner

+0

[与jquery同步调用]的可能重复(http://stackoverflow.com/questions/2942544/synchronous-calls-with-jquery) - 你不能阻止运行时不阻止浏览器。而且你不能从回调中返回响应,你必须将它分配给一个变量并从实际函数中返回该变量。 –

回答

10

使用jQuery(check the docs)时,您可以简单地设置async : false布尔值。请注意:从jQuery 1.8开始,不赞成使用带有jqXHR($ .Deferred)的async:false;您必须使用完整/成功/错误回调。

如果你不想使用jQuery或想知道底下发生了什么,read this

xmlhttp.open("GET","ajax_info.txt",false); 
xmlhttp.send(); 
document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 

还是怀疑,为什么你不希望它是异步虽然...

+1

首先,谢谢。其次,关于jQuery 1.8的说明还不清楚。另外,文档中提到'async'如下:'因为它可能导致浏览器无响应。那么我如何避免浏览器阻塞?这显然是不可接受的。 – Poni

+0

另一个想法是另一个问题。再次感谢你。 – Poni

+0

@Poni你有没有找到你提到的其他问题的答案?你是否为它创建了一个stackoverflow问题?关心链接到它? – Magne