同步、AJAX

本文介绍了异步交互及AJAX技术的基本概念、功能和应用案例,包括同步与异步交互的区别、如何利用jQuery简化编程过程以及PHP操作XML与JavaScript操作XML的实现方式。以登录案例为例,详细阐述了通过AJAX实现用户验证的过程。
 

同步:用户(在URL地址栏输入页面请求http://www.baidu.com)---

         服务器接收信息(函数或者新方法等待接收信息)---客户端继续向下执行-----

         (如果服务器处理请求结束,结果返回到新方法)---浏览器只处理所需的数据

         (不涉及整个页面的刷新)

 

功能

1)改善表单验证方式,不需要打开新的页面,也不需要进行整个页面的提交;

2)不需要刷新,减少了客户的等待时间;

3)按需要获取数据信息;

4)读取外部的数据,进行整合;

5)异步交互

 

登录的案例

   1)服务器端文件demo.php

      功能:验证用户名称的合法性

   2)前台页面index.html

      功能:显示输入用户名的区域

      jquery是一个Javascript库,简化编程过程

            ajax的一个框架

      使用:<script  type=”text/javascript”  src=”文件”></script>

get:将信息通过URL地址栏进行传递

post:将信息通过HTTP方式进行传递

 

第二种方式实现AJAX

    Php操作xml

Php内置DOMDocument

   $_doc = new DOMDocument();   //DOM对象

   $_doc->getElementsByTagName()  //nodelist对象 item length

Javascript操作

XML domdocument

   Var a = new activexobject;  //dom节点对象

a.     getelementbyid()

 

 

实例:

   同步:

index.html

<html>

<head>

  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

  <title>同步交互</title>

</head>

<body>

 <p>检查用户名称是否存在:</p>

<form  action=”demo.php”  method=”get”>

  用户名:<input  type=”text”  name=”name”>

          <input  type=”submit”  value=”提交”>

</form>

</body>

</html>

 

demo.php:

   <?php

     $get=$_GET[‘name’];

     if($get==”zhangsan”)

       echo  “登陆成功”;

     else

       echo  $get.”不存在”;

?>

 

 

 

异步:

index.html

<html>

<head>

  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

  <title>同步交互</title>

   <script  type=”text/javascript”  src=”jquery.js”>

</script>

 

<script  type=”text/javascript”  src=”yanzheng.js”>

</script>

 

</head>

<body>

 <p>检查用户名称是否存在:</p>

  用户名:<input  type=”text”  id=”username”>

          <input  type=”button”  value=”提交”  onclick=”yanzheng()”>

</body>

</html>

 

yanzheng.js:

  function  yanzheng(){

var  name=(“#username”);

var  username=name.val();

alert(username);

 

   $.get(“demo.php?name=”+username,null,callback)

   alert(data);

}

 

 demo.php:

 <?php

   $get=$_GET[‘name’];

   if($get=”zhangsan”)

echo  “成功”;

   else

    echo  $get.”不存在”;

  ?>

 

 

<think>我们正在讨论jQuery3.0弃用同步AJAX请求的原因。根据提供的引用,特别是引用[2]和引用[3],我们可以得知:-在jQuery3.0中,同步AJAX请求(即`async:false`)被标记为已弃用,并且在使用`jQuery.Deferred`(它是jQuery中处理异步操作的核心对象)时,再支持同步调用。-jQuery3.0将`Deferred`对象升级为与Promises/A+和ES2015Promises兼容,这导致了一些变更,其中包括对同步操作的限制。弃用的主要原因包括:1.**用户体验**:同步AJAX请求会阻塞浏览器的主线程,导致用户界面冻结(即页面无响应),直到请求完成。这会给用户带来非常糟糕的体验,尤其是在网络状况佳时。2.**现代浏览器的限制**:许多现代浏览器在主要线程(如WebWorkers以外的环境)中已经限制或警告使用同步XMLHttpRequest(特别是在主线程中),因为它会导致糟糕的用户体验。3.**Promise规范**:jQuery3.0将`Deferred`对象更新为与Promises/A+和ES2015Promises兼容。Promise规范本质上是为异步操作设计的,因此同步操作符合Promise的设计哲学。在Promise中,所有操作都应该是异步的,以保证一致性和可预测性。4.**代码可维护性**:异步编程模式(如Promise、async/await)可以更好地组织代码,避免回调地狱,提高代码的可读性和可维护性。而同步请求会迫使开发者编写阻塞式代码,这与现代JavaScript的异步趋势相悖。因此,jQuery团队决定弃用同步AJAX请求,以鼓励开发者使用异步模式,从而提升应用性能和用户体验。引用说明:-引用[2]提到在jQuery>=1.8中仍然支持`async:false`,但在jQuery3.0中,使用`async:false`与`jqXHR`(即`$.ajax`返回的jQueryXMLHttpRequest对象)结合的能力已被弃用,并建议使用新的回调选项(success/error/complete)代替传统的`jqXHR.done()`等方法[^2]。-引用[3]指出jQuery3.0中`Deferred`对象升级为与Promises/A+和ES2015Promises兼容,这导致了`.then()`方法的主要变更[^3]。综上所述,弃用同步AJAX请求是jQuery团队为了推动开发者采用更先进的异步编程模式,并提升用户体验而做出的决定。§§相关问题§§1.jQuery3.0中,除了弃用同步AJAX请求外,还有哪些主要变更?2.如何将使用同步AJAX请求的旧代码迁移到异步模式?3.在哪些情况下我们可能仍然需要使用同步AJAX请求?如何在使用jQuery的情况下实现同步请求?</think>### jQuery 3.0 弃用同步 AJAX 请求的原因 jQuery 3.0 弃用同步 AJAX 请求主要基于以下技术原因和设计理念: 1. **阻塞主线程导致用户体验恶化** 同步 AJAX(`async: false`)会阻塞浏览器主线程,导致页面完全冻结直到请求完成。当网络延迟较高时,用户界面会出现卡顿甚至"无响应"警告[^2]。例如: ```javascript // 同步请求导致页面冻结 $.ajax({ url: "...", async: false }); // 页面卡死直到响应返回 ``` 2. **与现代 Promise 规范冲突** jQuery 3.0 将 `Deferred` 对象升级为兼容 Promises/A+ 和 ES2015 标准[^3]。Promise 规范要求所有操作必须是**异步微任务**,而同步请求违背了这一设计原则: $$ \text{Promise} \Rightarrow \text{天生异步} \quad \not\equiv \quad \text{同步 AJAX} $$ 3. **浏览器限制与未来兼容性** 现代浏览器(如 Chrome)已在主线程限制同步 XMLHttpRequest,控制台会输出警告: > "Synchronous XMLHttpRequest on the main thread is deprecated..." 这迫使 jQuery 放弃同步支持以适应浏览器演进方向[^2][^4]。 4. **更好的异步编程范式** jQuery 推荐使用更健壮的异步方案: ```javascript // 标准异步方案 $.ajax(url) .done(function(data){ /* 成功处理 */ }) .fail(function(xhr){ /* 错误处理 */ }); ``` 结合 ES6 的 `async/await` 可模拟同步风格而阻塞线程: ```javascript async function fetchData() { const data = await $.ajax(url); console.log(data); // 非阻塞等待 } ``` 5. **性能优化需求** 同步请求会占用主线程资源,导致事件循环停滞。在复杂单页应用中,这可能引发动画卡顿、按钮响应延迟等问题[^3]。 > **迁移建议**: > 若需强制同步行为(如特殊遗留系统),可通过 `XMLHttpRequest` 原生实现[^1]: > ```javascript > const xhr = new XMLHttpRequest(); > xhr.open("GET", url, false); // 第三个参数 false 表示同步 > xhr.send(); > ``` ### 总结 弃用同步 AJAXjQuery 拥抱现代异步编程模型的关键改进,旨在提升应用响应能力、遵守 Promise 规范并规避浏览器限制[^2][^3]。开发者应迁移至 Promise 链或 `async/await` 等非阻塞方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值