同步和异步Ajax请求之间的区别

时间:2019-01-30 05:11:44

标签: ajax

enter image description here

除此以外,如果ajax调用后有一些代码,则在异步中它首先执行。在同步中,它在代码中一个接一个地执行。

5 个答案:

答案 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并查看