我有一个带有几个jQuery ajax调用的网页,这些调用同时针对.NET Web方法异步启动。
这些Web方法将数据返回给每个.ajax调用的成功回调处理。
我的问题可能是低级别的。 jQuery / Javascript如何知道哪些数据返回哪个.ajax调用?我使用网络嗅探器查看了返回数据包,但我看不到任何可用于将其链接回原始呼叫的标识。我的猜测它与jqXHR对象有关。如果它在响应数据包中,我无法在嗅探器中看到它。
任何技术解释都可能有所帮助。
增加: 我问这个是因为我将在服务器端使用异步方法。 .ajax最初调用的方法不是返回数据的方法。一个不同的线程正在做这项工作。
答案 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来确定哪些代码成功以及哪些代码是失败。
答案 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完成它的情况下,它会调用你的回调函数。