jQuery Ajax如何知道哪个响应数据与哪个成功回调?

时间:2011-04-07 19:23:30

标签: javascript jquery packet-capture packet-sniffers

我有一个带有几个jQuery ajax调用的网页,这些调用同时针对.NET Web方法异步启动。

这些Web方法将数据返回给每个.ajax调用的成功回调处理。

我的问题可能是低级别的。 jQuery / Javascript如何知道哪些数据返回哪个.ajax调用?我使用网络嗅探器查看了返回数据包,但我看不到任何可用于将其链接回原始呼叫的标识。我的猜测它与jqXHR对象有关。如果它在响应数据包中,我无法在嗅探器中看到它。

任何技术解释都可能有所帮助。

增加: 我问这个是因为我将在服务器端使用异步方法。 .ajax最初调用的方法不是返回数据的方法。一个不同的线程正在做这项工作。

5 个答案:

答案 0 :(得分:5)

浏览器可以从Web服务器请求多个图像并知道将每个图像放在页面上的相同方式。它是HTTP协议的一部分。浏览器发送请求,响应在同一TCP套接字上发送。如果浏览器同时等待多个对象,则会打开多个TCP套接字。

在数据包嗅探器中,仔细查看TCP端口号,特别是响应端口(非80端口)。

您的浏览器和您的网络服务器/框架将做正确的事情。在服务器端,确保将响应发送到相应的请求,它将返回到jquery中的正确位置,无论收到订单/处理时间长短。如果你有多个线程在服务器上交换数据,那么你的生活就会比你需要的更难,所以我认为你有充分的理由知道你在做什么。

答案 1 :(得分:1)

我相信这篇文章可能包含您正在寻找的一些信息。 HTTP请求和响应通过称为交换的过程配对。

Name for HTTP Request+Response

XMLHttpRequests在请求后将HTTP状态代码(例如200,304,500等)和readyState返回给浏览器。 jQuery ajax使用XMLHttpRequest来确定哪些代码成功以及哪些代码是失败。

https://developer.mozilla.org/En/Using_XMLHttpRequest

http://api.jquery.com/jQuery.ajax/

答案 2 :(得分:1)

这是通过一个名为闭包的概念。简而言之,AJAX调用总是引用您的成功回调,例如:

function ajax(params, callback){
    // fire off AJAX call
    // on response:
    callback(data);
}

如果多次调用ajax,callback是每个变量的新变量。几年后我写了一篇关于这个概念的文章可能有所帮助:http://www.htmlgoodies.com/primers/jsp/article.php/3606701/Javascript-Basics-Part-9.htm

答案 3 :(得分:0)

当进行AJAX调用时,jQuery会创建对底层XMLHTTPRequest对象的内部引用,并将事件处理程序绑定到该对象。

答案 4 :(得分:0)

你有没有使用XMLHttpRequest objec t没有图书馆?如果你这样做,理解起来非常简单。我建议你去编写10行代码,看看它是如何工作的。

您为要对服务器发出的每个请求创建XMLHttPRequest对象的实例。您为它分配了一个onreadystatechange事件处理程序,该处理程序将被调用4次。当readystate命中4时,它就完成了。在JQuery完成它的情况下,它会调用你的回调函数。