当我们使用$ .post时,我使用断点并发现我的Page_Load事件再次触发。 那么$ .post的用途是什么,这是部分回发吗?
我很困惑,如果在两种情况下都会触发Page_Load事件(服务器端调用,$ .post) 那么$ .post的优势是什么?
答案 0 :(得分:5)
我相信您使用$ .post访问同一页面,这完全违背了使用ajax的目的。您应该将$ .post发送到直接处理您请求的Web服务(或其他页面)。
此外,为解决您的主要问题,$ .post在技术上根本不是回发。它是一个xmlHttpRequest(ajax)。术语“部分回发”通常指的是ajax。
答案 1 :(得分:2)
$.post()向服务器发出HTTP POST请求,但未提交网页<form>
。既不发生部分也不完整的回发。
但是如果你以这种方式请求页面的URL,它确实会被提供,并且它的Page_Load
处理程序将会运行。
如果您尝试调用页面方法,则可能需要更改指定的dataType
(如果您忘记这样做,请使用[WebMethod]属性修饰页面方法)
答案 2 :(得分:0)
$。帖子有最佳优势: 用户不知道页面是否刷新。 他将能够在没有页面刷新的情况下查看数据。
答案 3 :(得分:0)
传统上,网页需要重新加载才能更新其内容。对于基于Web的电子邮件,这意味着用户必须手动重新加载其收件箱以检查并查看他们是否有新邮件。这有很大的缺点:它很慢,需要用户输入。当用户重新加载其收件箱时,服务器必须重建整个网页并重新发送所有HTML,CSS,JavaScript以及用户的电子邮件。这非常低效。理想情况下,服务器应该只发送用户的新消息,而不是整个页面。到2003年,所有主流浏览器都采用XMLHttpRequest(XHR)对象解决了这个问题,允许浏览器与服务器通信而无需重新加载页面。
XMLHttpRequest对象是名为Ajax(异步JavaScript和XML)的技术的一部分。使用Ajax,然后可以使用XMLHttpRequest API在浏览器和服务器之间传递数据,而无需重新加载网页。随着XMLHttpRequest对象的广泛采用,很快就可以构建Web应用程序,如Google Maps,以及使用XMLHttpRequest获取新地图图块的GMail,或者无需重新加载整个页面的新电子邮件。
Ajax请求由JavaScript代码触发;您的代码向URL发送请求,当它收到响应时,可以触发回调函数来处理响应。由于请求是异步的,因此在处理请求时,其余代码将继续执行,因此必须使用回调来处理响应。
不幸的是,不同的浏览器以不同的方式实现Ajax API。通常这意味着开发人员必须考虑所有不同的浏览器,以确保Ajax能够普遍运行。幸运的是,jQuery提供了Ajax支持,可以消除痛苦的浏览器差异。它提供了全功能的$ .ajax()方法和简单的便捷方法,如$ .get(),$。getScript(),$。getJSON(),$ .post()和$()。 ()。
大多数jQuery应用程序实际上并不使用XML,尽管名称为“Ajax”;相反,它们以纯HTML或JSON(JavaScript Object Notation)传输数据。
通常,Ajax不能跨域工作。例如,从example1.com加载的网页无法向example2.com发出Ajax请求,因为它会违反相同的源策略。作为一种解决方法,JSONP(带填充的JSON)使用标签从另一个域加载包含任意JavaScript内容和JSON的文件。最近,浏览器实现了一种称为跨源资源共享(CORS)的技术,该技术允许Ajax请求到不同的域。
关键概念
正确使用与Ajax相关的jQuery方法需要首先理解一些关键概念。
GET vs. Post
向服务器发送请求的两种最常见的“方法”是GET和POST。了解每种方法的正确应用非常重要。
GET方法应该用于非破坏性操作 - 也就是说,您只是从服务器“获取”数据而不是更改服务器上的数据的操作。例如,对搜索服务的查询可能是GET请求。浏览器可能会缓存GET请求,如果您不期望它,可能会导致不可预测的行为。 GET请求通常会在查询字符串中发送所有数据。
POST方法应该用于破坏性操作 - 即您在服务器上更改数据的操作。例如,保存博客帖子的用户应该是POST请求。 POST请求通常不会被浏览器缓存;查询字符串可以是URL的一部分,但数据往往作为后期数据单独发送。
数据类型
jQuery通常需要一些关于您希望从Ajax请求中获取的数据类型的指令;在某些情况下,数据类型由方法名称指定,在其他情况下,它作为配置对象的一部分提供。有几种选择:
文本
用于传输简单的字符串
HTML
用于传输要放在页面上的HTML块
脚本
用于向页面添加新脚本
JSON
用于传输JSON格式的数据,包括字符串,数组和对象
请注意
从jQuery 1.4开始,如果服务器发送的JSON数据格式不正确,请求可能会无提示失败。有关正确格式化JSON的详细信息,请参阅http://json.org,但作为一般规则,请使用内置语言方法在服务器上生成JSON以避免语法问题。
JSONP
用于从其他域传输JSON数据
XML
用于在自定义XML架构中传输数据
在大多数情况下,我强烈支持使用JSON格式,因为它提供了最大的灵活性。它对于同时发送HTML和数据特别有用。
A代表异步
Ajax的异步性让很多新的jQuery用户措手不及。由于Ajax调用默认是异步的,因此响应不会立即可用。只能使用回调来处理响应。因此,例如,以下代码将不起作用:
123456789 变量响应; $ .get(&#34; foo.php&#34;,function(r){response = r;}); console.log(响应); //未定义
相反,我们需要将回调函数传递给我们的请求;当请求成功时,此回调将运行,此时我们可以访问它返回的数据(如果有的话)。
123 $ .get(&#34; foo.php&#34;,function(response){console.log(response); // server response});
同源政策和JSONP
通常,Ajax请求仅限于与发出请求的页面相同的协议(http或https),相同的端口和相同的域。此限制不适用于通过jQuery的Ajax方法加载的脚本。
另一个例外是针对另一个域上的JSONP服务的请求。在JSONP的情况下,服务提供者同意使用可以使用标记加载到页面中的脚本来响应您的请求,从而避免同源限制;该脚本将包含您请求的数据,包含在您提供的回调函数中