【问题标题】:How does jQuery Ajax know which reponse data goes with which success callback?jQuery Ajax 如何知道哪个响应数据与哪个成功回调对应?
【发布时间】:2011-07-31 23:33:36
【问题描述】:

我有一个网页,其中包含几个 jQuery ajax 调用,它们同时针对 .NET web 方法异步触发。

这些 web 方法返回数据以供每个 .ajax 调用的成功回调处理。

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

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

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

【问题讨论】:

  • 我喜欢尼尔。 @Tony_Nenrich,其实很简单,每个 ajax 调用都发送和接收自己的数据,这意味着它们永远不会混淆。
  • @Neal:已经足够好了。我希望这不是你不给出好的答案的理由。
  • @Khez:我正在寻找更多细节。他们为什么不混在一起?是什么将它们联系在一起?在此期间是否必须连接并打开通道?
  • 您的问题起初令人困惑。您是在问如何将 Ajax 请求与正确的响应配对?

标签: javascript jquery packet-capture packet-sniffers


【解决方案1】:

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

在您的数据包嗅探器中,仔细查看 TCP 端口号,尤其是响应端口(不是 80 的端口)。

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

【讨论】:

    【解决方案2】:

    这是通过一个称为闭包的概念。简而言之,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】:

      我相信这篇文章可能包含您正在寻找的一些信息。 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/

      【讨论】:

      • 但是浏览器可以在一秒钟内得到几个200个状态码。它仍然需要知道哪个去哪个。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        您是否曾经在没有库的情况下使用过XMLHttpRequest object?如果你这样做,很容易理解。我建议你去编写 10 行代码,看看它是如何工作的。

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

        【讨论】:

          猜你喜欢
          • 2019-11-30
          • 2019-08-17
          • 1970-01-01
          • 1970-01-01
          • 2020-07-11
          • 2021-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多