Как jQuery Ajax узнает, какие данные отклика идут с каким коллбэком успеха? - PullRequest
2 голосов
/ 07 апреля 2011

У меня есть веб-страница с несколькими вызовами jQuery ajax, которые одновременно запускаются асинхронно с веб-методами .NET.

Эти веб-методы возвращают данные для обработки обратными вызовами успеха для каждого вызова .ajax.

Мой вопрос, вероятно, низкий уровень.Как jQuery / Javascript узнает, какие данные возвращаются в какой вызов .ajax?Я посмотрел на возвращаемый пакет, используя сетевой сниффер, и не смог найти какой-либо тип идентификации, который можно было бы использовать, чтобы связать его с исходящим вызовом.Полагаю, это связано с объектом jqXHR.Если он находится в пакете ответов, я не вижу его в сниффере.

Любое техническое объяснение может быть полезным.

Добавление: Я спрашиваю об этом, потому что ябудет использовать асинхронные методы на стороне сервера.Изначально вызванный метод .ajax не возвращает данные.Другой поток делает работу.

Ответы [ 5 ]

5 голосов
/ 07 апреля 2011

Точно так же браузер может запрашивать несколько изображений с веб-сервера и знать, где разместить каждое из них на странице.Это часть протокола HTTP.Браузер отправляет запрос, и ответ отправляется на тот же сокет TCP.Если браузер ожидает нескольких объектов одновременно, у него открыто несколько сокетов TCP.

В анализаторе пакетов внимательно посмотрите на номера портов TCP, особенно на порт ответа (порт, который не является 80).

Ваш браузер и ваш веб-сервер будут работать правильно.На стороне сервера убедитесь, что вы отправили свой ответ на соответствующий запрос, и он вернется в нужное место в jquery независимо от полученного заказа / того, сколько времени заняла обработка.Если у вас есть несколько потоков, обменивающихся данными на сервере, вы делаете свою жизнь сложнее, чем нужно, поэтому я полагаю, что у вас есть веские основания для того, чтобы знать, что вы делаете.

1 голос
/ 07 апреля 2011

Это через концепцию, называемую замыканиями. Проще говоря, вызов AJAX всегда содержит ссылку на ваш успешный обратный вызов, например ::100100

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

1 голос
/ 07 апреля 2011

Я считаю, что в этом сообщении может быть некоторая информация, которую вы ищете. HTTP-запросы и ответы соединяются через процесс, называемый обменами.

Имя для HTTP-запроса + Ответ

XMLHttpRequests возвращает коды состояния HTTP (например, 200, 304, 500 и т. Д.) И readyState в браузер после запроса. jQuery ajax использует XMLHttpRequest, чтобы определить, какие коды успешны, а какие - нет.

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

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

0 голосов
/ 07 апреля 2011

Вы когда-нибудь использовали XMLHttpRequest objec t без библиотеки? Это довольно просто понять, если вы делаете это. Я бы порекомендовал вам пойти и написать 10 строк кода, чтобы увидеть, как это работает.

Вы создаете экземпляр объекта XMLHttPRequest для каждого запроса, который вы хотите сделать на сервер. Вы назначаете ему обработчик события onreadystatechange, который вызывается 4 раза. Когда состояние готовности достигает 4, это делается. В ситуации JQuery, когда это сделано, он вызывает вашу функцию обратного вызова.

0 голосов
/ 07 апреля 2011

Когда выполняется вызов AJAX, jQuery создает внутреннюю ссылку на базовый объект XMLHTTPRequest и привязывает обработчики событий к этому объекту.

...