0

当我们使用 $.post 时,我使用了断点,发现我的 Page_Load 事件再次触发。那么$.post有什么用,这是部分回发吗?

我很困惑,如果 Page_Load 事件在两种情况下都触发(服务器端调用,$.post),那么 $.post 有什么优势?

4

4 回答 4

5

我相信您正在使用 $.post 访问同一页面,这完全违背了使用 ajax 的目的。您应该 $.post 到直接处理您的请求的网络服务(或其他页面)。

此外,为了解决您的主要问题, $.post 在技术上根本不是回发。它是一个 xmlHttpRequest (ajax)。术语“部分回发”通常是指 ajax。

于 2013-02-22T18:32:44.370 回答
2

$.post()向服务器发出HTTP POST请求,而不提交页面的<form>. 既不会发生部分回发,也不会发生完全回发。

但是,如果您以这种方式请求页面的 URL,它确实会被提供,并且它的Page_Load处理程序将运行。

如果您尝试调用页面方法,则可能必须更改您指定的方法(或者如果您忘记这样做,则使用[WebMethod]dataType属性装饰您的页面方法)。

于 2013-02-22T18:33:25.870 回答
0

$.post 的最大优势是:用户不知道页面是否刷新。他将能够在不刷新页面的情况下看到数据。

于 2013-02-22T18:32:54.800 回答
0

传统上,网页需要重新加载以更新其内容。对于基于网络的电子邮件,这意味着用户必须手动重新加载他们的收件箱来检查他们是否有新邮件。这有很大的缺点:速度很慢并且需要用户输入。当用户重新加载他们的收件箱时,服务器必须重建整个网页并重新发送所有的 HTML、CSS、JavaScript 以及用户的电子邮件。这是非常低效的。理想情况下,服务器应该只需要发送用户的新消息,而不是整个页面。到 2003 年,所有主流浏览器都通过采用 XMLHttpRequest (XHR) 对象解决了这个问题,允许浏览器与服务器通信而无需重新加载页面。

XMLHttpRequest 对象是称为 Ajax(异步 JavaScript 和 XML)的技术的一部分。使用 Ajax,然后可以使用 XMLHttpRequest API 在浏览器和服务器之间传递数据,而无需重新加载网页。随着 XMLHttpRequest 对象的广泛采用,很快就可以构建像 Google Maps 和 GMail 这样的 Web 应用程序,这些应用程序使用 XMLHttpRequest 来获取新的地图图块或新的电子邮件,而无需重新加载整个页面。

Ajax 请求由 JavaScript 代码触发;您的代码向 URL 发送请求,当它收到响应时,可以触发回调函数来处理响应。因为请求是异步的,所以您的其余代码会在处理请求时继续执行,因此必须使用回调来处理响应。

不幸的是,不同的浏览器以不同的方式实现 Ajax API。通常,这意味着开发人员必须考虑所有不同的浏览器,以确保 Ajax 可以通用。幸运的是,jQuery 提供了 Ajax 支持,可以抽象出令人痛苦的浏览器差异。它提供了功能齐全的 $.ajax() 方法和简单的便捷方法,例如 $.get()、$.getScript()、$.getJSON()、$.post() 和 $().load ()。

尽管名称为“Ajax”,但大多数 jQuery 应用程序实际上并不使用 XML;相反,它们将数据传输为纯 HTML 或 JSON(JavaScript 对象表示法)。

通常,Ajax 不能跨域工作。例如,从 example1.com 加载的网页无法向 example2.com 发出 Ajax 请求,因为它违反了同源策略。作为一种变通方法,JSONP(带填充的 JSON)使用标签从另一个域加载包含任意 JavaScript 内容和 JSON 的文件。最近浏览器实现了一种称为跨域资源共享 (CORS) 的技术,该技术允许 Ajax 请求到不同的域。

关键概念

正确使用与 Ajax 相关的 jQuery 方法需要首先了解一些关键概念。

获取与发布

向服务器发送请求的两种最常见的“方法”是 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 var 响应;$.get("foo.php", function(r) { response = r; }); 控制台日志(响应);// 不明确的

相反,我们需要向我们的请求传递一个回调函数;此回调将在请求成功时运行,此时我们可以访问它返回的数据(如果有)。

123 $.get( "foo.php", function( response ) { console.log( response ); // 服务器响应});

同源策略和 JSONP

通常,Ajax 请求仅限于与发出请求的页面相同的协议(http 或 https)、相同的端口和相同的域。此限制不适用于通过 jQuery 的 Ajax 方法加载的脚本。

另一个例外是针对另一个域上的 JSONP 服务的请求。在 JSONP 的情况下,服务的提供者已经同意使用可以使用标签加载到页面中的脚本来响应您的请求,从而避免了同源限制;该脚本将包含您请求的数据,并包含在您提供的回调函数中

于 2013-02-22T18:57:56.020 回答