jQuery готовое событие не стрелял в частичную загрузку страницы

Часто времена я заканчиваю с кодом как:

int SomeAPICallbackMethod(long a, long b, SomeCrazyClass c, long d, string e, string f, long double yx) { ... }
int AnotherCallback(long a, long b, SomeCrazyClass c, long d, string e, string f, long double yx) { ... }
int YetAnotherCallback(long a, long b, SomeCrazyClass c, long d, string e, string f, long double yx) { ... }

В некоторых случаях я буду использовать следующее для создания моей жизни легче:

#define APIARGS long a, long b, SomeCrazyClass c, long d, string e, string f, long double yx
int SomeAPICallbackMethod(APIARGS) { ... } 

Это идет с протестом реального сокрытия имен переменной, которые могут быть проблемой в больших системах, таким образом, это - не всегда правильный поступок, [только 112] иногда .

6
задан Mr AH 9 December 2009 в 17:29
поделиться

5 ответов

How are you firing the AJAX request to the server? If you're using ASP.NET AJAX, then Brian Hasden's answer is what you are looking for. If you are using jQuery to send the request, then you can either set a call back using the load function.

$(".ajaxLink").load(url, null, function() {
    // code here
});

load() Documentation

or set a global ajaxComplete event that is fired every time an ajax call is complete.

$(document).ajaxComplete(function() {
    // code here
});

ajaxComplete() Documentation

4
ответ дан 17 December 2019 в 00:10
поделиться

The load method offers a callback which is executed after the content has been loaded.

$("#myDiv").load(url, null, function() { 
   //do your stuff here 
});

Full documentation and examples at jQuery.com: http://docs.jquery.com/Ajax/load

2
ответ дан 17 December 2019 в 00:10
поделиться

Я считаю, что вы можете сделать что-то вроде этого (получено из ASP.NET ):

<script type=”text/javascript”>
     <!--
     Sys.WebForms.PageRequestManager.getInstance().add_EndRequest(Request_End);
     function Request_End(sender, args)
     {
          // Insert code you want to occur after partial page load here
     }
     // -->
</script>

Который должен подключиться к событию конечного запроса, которое включает частичные обновления страницы. Вы, очевидно, обновите приведенный выше пример, чтобы вызвать соответствующую функцию JS, которая вам нужна.

-1
ответ дан 17 December 2019 в 00:10
поделиться

Что ж, я использую ASP.NET MVC с jQuery. Я НЕ использую частичное представление (ascx) для этой части приложения, вместо этого я использую полные представления, а загружаю их в div. Итак, у меня есть основное представление с головой с некоторой ссылкой на файл js, который является логикой на стороне клиента для этого «типа» представления. При нажатии на какую-либо вкладку в этом представлении мы используем вкладки jquery для «загрузки» другого представления в некоторый div. Вкладки загружаются с помощью этого плагина путем простого указания URL-адреса (вместо использования load, к которому, как уже указывалось, я мог бы добавить функцию обратного вызова, а не полагаться на готовность).

Однако. Я не хочу, чтобы ВСЯ клиентская логика находилась в каком-либо родительском представлении, поскольку любое представление должно иметь возможность загружать другое представление по URL-адресу (дополнительные представления включают ссылку на связанный с ними файл js, который содержит всю логику для форматирования / подключения при загрузке).

Что меня ДЕЙСТВИТЕЛЬНО сбивает с толку, так это то, что в одних ситуациях это работает, а в других нет; например, 1) когда родительский вид открывается во фрейме в IE, готовые подвиды никогда не запускаются 2) при открытии того же URL-адреса непосредственно в IE, вспомогательные представления запускаются ARE 3) при открытии того же URL-адреса в FFX2 готово все НЕ запускаются 4) наконец ... но при открытии дополнительного представления (которое имеет вспомогательные представления) этого родителя в FFX2 запускается дочернее событие готовности! .. сбивает с толку ..

Я собираюсь запустить несколько тестов n вернуться к вам, но любые предложения о том, почему это поведение может отличаться, были бы очень признательны

ОБНОВЛЕНИЕ: Ах, ха! .. похоже, что даже после устранения вышеуказанных препятствий есть разница в браузере (очевидно, из прочтения выше ) .. приведенный ниже простой тест отлично работает в IE7, но не работает в FFX2. Событие готовности запускается в IE, но не в FFX при загрузке Test2.htm в Test1.htm. По опыту я знаю, что это означает, что IE имеет "причуду" и FFX работает так, как и следовало ожидать, на основе W3C. Так что, похоже, такой подход - нет-нет, если у кого-то нет предложений?:

Test1.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org        /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title></title>
    <script type="text/javascript" language="javascript" src="Scripts/jquery-1.3.2.js">    </script>
    <script type="text/javascript" language="javascript">
    <!--
        $(document).ready(function() {
            alert("Test1.htm");
            $("#Test1").load("Test2.htm");
        });
    //-->
    </script>
</head>
<body>
    <h3>SOME TEST</h3>
    <div id="Test1">EMPTY</div>
</body>
</html>

Test2.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org        /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title></title>
    <script type="text/javascript" language="javascript" src="Scripts/jquery-1.3.2.js">    </script>
    <script type="text/javascript" language="javascript">
    <!--
        $(document).ready(function() {
            alert("Test2.htm");
            //$("#Test1").load("Test3.htm"); // load more
        });
    //-->
    </script>
</head>
<body>
    <h3>SOME TEST</h3>
    <div id="Test2">EMPTY</div>
</body>
</html>
1
ответ дан 17 December 2019 в 00:10
поделиться

Хорошо ... теперь у меня есть простой ответ на эту проблему, который должен означать минимальные изменения кода. Вместо вложенных представлений (это настоящие aspx-представления, не имеющие тегов html, head или body), имеющих js include (по сути, модель поведения на стороне клиента), который отвечает на $ (document) .ready, мы можем использовать предложение от mkedobbs , чтобы предоставить нечто подобное. Просто:

$("#MyDiv").load("page.htm", null, function(){ $(document).trigger("PartialLoaded"); });

Затем в подвиде js включить

$(document).bind("PartialLoaded", function(){ .........});
1
ответ дан 17 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: