В IE7 как установить глобальную переменную или значение элемента с помощью вызова ajax во время события jquery .click? - PullRequest
0 голосов
/ 11 июля 2011

В IE7, когда этот код вызывается в событии click .submittable, мне нужно дважды нажать кнопку подтверждения, чтобы получить глобальную переменную orderCount, которую нужно установить.Или, если я установлю значение атрибута для скрытого тега, я получу такой же опыт.Чтобы установить значение элемента, нужно дважды нажать кнопку.Как будто мне нужно дать браузеру больше времени для обработки.Есть предложения?Спасибо, Нейт

var orderCount = 0;
$(document).ready(function(){
$('.submittable').click(function(){
        setOrderCount()
        if ( orderCount == 0 ){
            if (validateAcknowledment($(this).attr('id'))){
                acknowledgeDay($(this).attr('id'));
            }       
        }
    });
});
function setOrderCount(){

    // move this up to validate and do a setAtr
    var school = $("#school").val();
    var orderDate = $("#orderDate").val();
    $.ajax({
        url: "/fos/inventory/getPreviousWeeklyMenuOrders",
        type: "GET",
        dataType: 'json',
        cache:false,
        data: {school: school,
            startWeekMonth: Date.parse(orderDate).getMonth(),
            startWeekDay: Date.parse(orderDate).getDate(),
            startWeekYear: Date.parse(orderDate).getFullYear()
        },
        success: function(data) {

            orderCount = data.orderCount;
            if(orderCount > 0){
                showErrorMessage("You must Acknowledge prior Weekly Menu Order(s) before acknowledging this week's order", 200, 300);
            }

        }
});

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

Удивительно, сколько таких вопросов возникает.

По умолчанию вызов AJAX является асинхронным. Вы инициируете вызов на своей 4-й линии, а затем проверяете orderCount на 5-й линии, прежде чем ваш асинхронный вызов завершится. При втором щелчке ваш асинхронный вызов завершен, и код выполняет то, что, по вашему мнению, должен делать первый щелчок.

Вам необходимо переместить логику проверки orderCount в вашу анонимную функцию обратного вызова «success», чтобы она выполнялась только после завершения вызова. Или сделайте вызов ajax синхронным (опции jquery)

1 голос
/ 11 июля 2011

Прежде всего, вам необходимо понять, что setOrderCount является асинхронной функцией. Он запустит вызов ajax, и этот вызов может занять некоторое время для обработки. Функция setOrderCount вернется сразу же, задолго до завершения вызова ajax и, следовательно, задолго до того, как была установлена ​​переменная orderCount.

Затем в обработчике кликов вы немедленно проверяете переменную orderCount, но она еще не установлена. Что вам нужно сделать, это переместить этот код в функцию успеха из вызова ajax:

   if ( orderCount == 0 ){
        if (validateAcknowledment($(this).attr('id'))){
            acknowledgeDay($(this).attr('id'));
        }       
    }

потому что именно тогда переменная orderCount фактически установлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...