答案 0 :(得分:2)
同步(async:false) –脚本停止并等待服务器发回答复,然后再继续。在某些情况下,必须使用同步Ajax。在标准Web应用程序中,客户与服务器之间的交互是同步的。这意味着一个必须在另一个之后发生。 同步部分:
class MyTest < ActiveSupport::TestCase
describe 'some test'
before do
@user = FactoryBot.create(:user)
end
it 'first test' do
# some code
end
it 'second test' do
# some code
end
end
end
异步部分:
$.ajax({
url: "file.php",
type: "POST",
async: false,
success: function(data) {
// write something awesome in response data part
}
});
就这样。基本上,人们在第一个请求完成时需要发送请求时使用异步。就是说,您的请求将一一处理,但并非所有请求都会立即发送。取而代之的是,在同步ajax调用中,您的所有请求都将同步完成。
答案 1 :(得分:1)
基本上,Asynchronous
请求实际上并不介意其他代码(如果它们已经执行)。仅当它已经从您发送请求的位置接收到响应时,它才会执行。
Ajax请求本质上是Asynchronous
,但是可以将其设置为Synchronous
,因此,先获取代码,然后再执行。
//注意:Synchronous
ajax请求已被jquery弃用,最好使用promises。
答案 2 :(得分:1)
是的。 Javascript示例:
var xhr = new XMLHttpRequest();
var button = document.getElementById('button');
xhr.open('GET', '/', true);
xhr.send(); // (1)
xhr.onreadystatechange = function() { // (3)
if (xhr.readyState != 4) return;
button.innerHTML = 'Ready!';
if (xhr.status != 200) {
alert(xhr.status + ': ' + xhr.statusText);
} else {
alert(xhr.responseText);
}
}
button.innerHTML = 'Loading...'; // (2)
button.disabled = true;
如果xhr.open()中有第三个参数,且该参数等于 true ,则请求将为异步。这意味着在调用xhr.send()之后,(1)处的代码不会“挂起”,但仍会执行,字符串(2)将执行,并且xhr请求的结果在状态后获得 更改事件(3)。
我从本文稍微更改了代码示例: https://javascript.info/xmlhttprequest
答案 3 :(得分:0)
同步Ajax请求:它会阻止事件循环,这意味着您/浏览器无法执行其他活动(单击按钮,加载图像等)
异步Ajax请求:它不会阻止事件循环,并且在处理Ajax时能够执行其他活动。
事件循环:javascript中实现异步操作的机制。有关详细信息,您可以对其进行谷歌搜索。
答案 4 :(得分:0)
<h2>Synchronous Request</h2>
<p id="demo"></p>
<script>
var xmlhttp = new XMLHttpRequest();
alert("after creating XMLHttpRequest ");
xmlhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
var myObj = JSON.parse(this.responseText);
alert("In function");
document.getElementById("demo").innerHTML = "Name from JSON Data : " + myObj.name;
}
};
xmlhttp.open("GET", "emp.json", false);//Synchronous
xmlhttp.send();
alert("after send");
</script>
为了更好地理解,我使用Alert来了解同步和异步请求的发生方式,将其设置为true并查看