Ajax / JQuery Timing Issue - PullRequest
       3

Ajax / JQuery Timing Issue

1 голос
/ 04 марта 2012

У меня есть функция щелчка, которая выполняет jQuery / Ajax $ .post для получения данных из веб-службы при щелчке по диапазону. Когда для функции click установлена ​​точка останова Firebug, все работает как положено (некоторые новые таблицы добавляются в таблицу). Когда точка останова не установлена, при нажатии на интервал ничего не происходит. Firebug не показывает никаких ошибок. Я предполагаю, что из-за других вопросов, связанных со стековым потоком, это проблема синхронизации, но я не знаю, что с этим делать. Я попытался перейти с $ .post на $ .ajax и установить для async значение false, но это не помогло. Вот код для обработчика кликов:

$('.rating_config').click(function(event){
    event.preventDefault();
    event.stopPropagation();
    var that = $(this);

    // calculate the name of the module based on the classes of the parent <tr>
    var mytrclasses = $(this).parents('tr').attr('class');
    var modulestart = mytrclasses.indexOf('module-');
    var start = mytrclasses.indexOf('-', modulestart) + 1;
    var stop = mytrclasses.indexOf(' ', start);
    var mymodule = mytrclasses.substring(start, stop);
    mymodule = mymodule.replace(/ /g, '+');
    mymodule = mymodule.replace(/_/g, '+');
    mymodule = encodeURI(mymodule);

    // calculate the name of the property based on the classes of the parent <tr>
    var propertystart = mytrclasses.indexOf('property-');
    var propstart = mytrclasses.indexOf('-', propertystart) + 1;
    var propstop = mytrclasses.indexOf(' ', propstart);
    var myproperty = mytrclasses.substring(propstart, propstop);
    myproperty = myproperty.replace(/ /g, '+');
    myproperty = myproperty.replace(/_/g, '+');
    myproperty = encodeURI(myproperty);
    var parentspanid = $(this).attr('id');

    // Remove the comparison rows if they are already present, otherwise generate them
    if ($('.comparison_' + parentspanid).length != 0) {
        $('.comparison_' + parentspanid).remove();
    } else {
        $.post('http://localhost/LearnPHP/webservice.php?user=user-0&q=comparison&level=property&module=' + mymodule + '&version_id=1.0&property=' + myproperty + '&format=xml', function(data) {
            var data = $.xml2json(data);

            for (var propnum in data.configuration.modules.module.properties.property) {
                var prop = data.configuration.modules.module.properties.property[propnum];
                console.log(JSON.stringify(prop));
                prop.mod_or_config = 'config';
                var item_id = mymodule + '?' + prop.property_name + '?' + prop.version_id + '?' + prop.value;
                item_id = convertId(item_id);
                prop.id = item_id;
                //alert('prop.conformity = ' + prop.conformity);
                // genRow(row, module, comparison, comparison_parentspanid)
                var rowstring = genRow(prop, mymodule, true, parentspanid);
                console.log('back from genRow. rowstring = ' + rowstring);
                $(that).closest('tr').after(rowstring);
                //$('tr#node-' + data[row].id + ' span#rating' + row.id).css('background', '-moz-linear-gradient(left, #ff0000 0%, #ff0000 ' + data[row].conformity + '%, #00ff00 ' + 100 - data[row].conformity + '%, #00ff00 100%');
                var conformity_color = getConformityColor(prop.conformity);
                $('tr#comparison_module_' + mymodule + '_setting_' + prop.id + ' span#module_' + mymodule + '_rating' + prop.id).css({'background':'-moz-linear-gradient(left, ' + conformity_color + ' 0%, ' + conformity_color + ' ' + prop.conformity + '%, #fffff0 ' + prop.conformity + '%, #fffff0 100%)'});
                //$('tr#comparison-' + data[row].id + ' span#rating' + data[row].id).css('background','-webkit-linear-gradient(left,  #00ff00 0%, #00ff00 ' + data[row].conformity + '%, #ff0000 ' + (100 - (data[row].conformity + 2)) + '%, #ff0000 100%)');

            }
        });
        // Hide the Fix by mod column
        hideFixedByModCol();

        $('tr.comparison_' + parentspanid).each(function(i){
                if (i % 2 == 0) {
                    $(that).addClass('comparison_even');
                } else {
                    $(that).addClass('comparison_odd');
                }
            });
    }

  });

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 04 марта 2012

Я подозреваю, что ваши данные возвращаются неправильно сформированными. Вложите свой код с перерыва в try {} catch {}, чтобы увидеть сгенерированную ошибку. Также было бы неплохо добавить обработку ошибок в ваш ajax-запрос.

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