Может ли функция $ .post перезаписывать переменные в родительской функции - PullRequest
0 голосов
/ 22 июня 2011

На прошлой неделе я начал играть с javascripts, поэтому мои знания ... очень ограничены. Пожалуйста, будьте терпеливы со мной: -)

Я пишу простую систему бронирования, которая хранит в MySql даты и идентификаторы пользователей. Он проверяет, забронирован ли данный день (если да, то isTicket.php возвращает UserId, если он все еще свободен, чем 0). Поскольку можно выбрать диапазон дней, и я не хотел бы отправлять несколько предупреждений, я установил для переменной otherEventFound значение false, если в любой из выбранных дней другой пользователь уже забронирован.

Как показано ниже, я попытался использовать эту переменную "вне" пост-функции, и есть две возможности:

1) Если мой скрипт содержит строку >> alert ("otherEventFound ... << работает. </p>

2) Если я уберу эту строку, она не будет.

Я немного дезориентирован. Может кто-нибудь объяснить, почему эта дополнительная строка предупреждения так важна, и в более общем смысле возможно ли перезаписать переменные в родительской функции из функции post.success?

Если это чистая удача, чем работа со строкой оповещения, как правильно это сделать в javascript?

parent function
...
var otherEventFound = new Boolean();
var do_the_booking = new Boolean();
otherEventFound = false;
do_the_booking = false;
for ( var i = myStart.getDfJ(); i <= myEnd.getDfJ(); i++)
    {
    // conver i to MySQL format yyyy-mm-dd
    var milliseconds = 1000 * 60 * 60 * 24 *i;
    var j = new Date(milliseconds);
    var strID = j.toYMD();
    // and ask server if there is other event on this day
    $.post("isTicket.php", { theDay: strID }, 
            function(answ){
               if ( parseInt(answ) == 0 ){
                  do_the_booking = true;
               }
               else {
                  if ( !(parseInt(answ) == currentUserId) ){
                     otherEventFound = true;
                  }
               }
            }
        );
    }

    alert ("otherEventFound " + otherEventFound + "   do_the_booking " + do_the_booking);

    if (otherEventFound==true) {
       alert ("There is not yours event booked on this day.");
       do_the_booking=false;
    };
    if (do_the_booking==true){
       var x=window.confirm("Do you want to book on this/these day/s?")
       if (x) {
          // ... do something like $.post("setTicket.php" ...
       }
    }

1 Ответ

3 голосов
/ 22 июня 2011

Когда вы делаете $ .post, это запускает асинхронный AJAX-запрос, который через некоторое время вызывает вашу встроенную функцию.Поскольку вы не хотите, чтобы определенный фрагмент кода выполнялся до тех пор, пока не вернется фиксированное число асинхронных запросов, вам придется отслеживать, сколько запросов было выполнено.

Единственная причина, по которой он "работает«с предупреждением, потому что предупреждение вставляет паузу до тех пор, пока вы не ответите на него, после чего выполняется вызов AJAX и выполняется встроенная функция.

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

var otherEventFound = false;
var do_the_booking = false;

var completeRequests = 0;
for ( var i = myStart.getDfJ(); i <= myEnd.getDfJ(); i++)
{
    // do something

    // and ask server if there is other event on this day
    $.post("isTicket.php", { theDay: strID }, 
            function(answ){
                completeRequests++;
                if ( parseInt(answ) == 0 ){
                    do_the_booking = true;
                }
                else {
                    if ( !(parseInt(answ) == currentUserId) ){
                        otherEventFound = true;
                    }
                }

                if (completeRequests == myEnd.getDfJ()) {
                    postProcessing();
                }               
            }
    );
}

function postProcessing() {
    alert ("otherEventFound " + otherEventFound + "   do_the_booking " + do_the_booking);

    if (otherEventFound==true) {
       alert ("There is not yours event booked on this day.");
       do_the_booking=false;
    };
    if (do_the_booking==true){
       var x=window.confirm("Do you want to book on this/these day/s?")
       if (x) {
          // ... do something like $.post("setTicket.php" ...
       }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...