как ждать асинхронной операции на форме - PullRequest
1 голос
/ 22 декабря 2010

Я добавил хук к событию отправки формы (в форме отправки есть другие события), и мне нужно сообщить о передаче на сервер в другом домене, используя createlement (скрипт).

Как я могузаставить функцию submit ждать, чтобы убедиться, что createlement (скрипт) успешно получил доступ к серверу?

Ответы [ 3 ]

5 голосов
/ 22 декабря 2010

Как насчет этого:

<script>
  function handleSubmit(form) {
    doSomethingAsynchron(
       function() { // callback function
          form.submit();
       }
    );
    return false;
  }
</script>

<form onsubmit="return handleSubmit(this);" ... >
...
</form>
1 голос
/ 22 декабря 2010

Попробуйте использовать JavaScript events .Вы можете зарегистрировать любую функцию, которая будет вызываться при наступлении определенного события.Либо используйте некоторые из предопределенных событий , чтобы сигнализировать о завершении вашего кода, либо используйте что-то вроде Yahoo!библиотека для создания пользовательских событий , которые могут представлять завершение запроса к серверу (нашел последний с коротким поиском в Google, но выглядит многообещающе).

Я ожидал, что JS будет иметь встроенныйв пользовательской архитектуре событий, но, очевидно, это не так.Таким образом, вам нужно использовать внешние библиотеки, такие как Yahoo!вещь.Может быть, это изменится в ближайшее время.Это выше моих знаний.Но я, безусловно, могу порекомендовать использовать события, потому что они решают именно ту проблему, которую вы описали.

(В качестве альтернативы вы можете делать ожидание занятости, как описано в Тариаме. Либо с циклами сна или вообще без ожидания ожидания не рекомендуется.)1011 *

Иллюстрация:

<script>
// register function b() for custom event

function a() {
    //upload
    // (takes time... but no busy wait)

    //fire custom event
}

function b() {
    //do some other code
}
</script>

<body>

<form onsubmit="a()">
</form>

</body>
0 голосов
/ 22 декабря 2010

Не очень элегантным решением было бы использование временного интервала, чтобы проверить, подключен ли скрипт к серверу (проверьте ответ).Для этого используйте setInterval .

...