почему мой AJAX загружает в два раза ту же функцию? - PullRequest
0 голосов
/ 20 марта 2011

Я пытаюсь создать форму подписки, которая в основном позволяет вам выбрать игру, а затем загрузить кучу цен на подписку для этой игры.До этого момента все отлично работало.Проблема в том, что когда я пытаюсь ввести 3 переключателя, чтобы выбрать оплату за 1 месяц / 6 месяцев / 1 год, функция, которую я вызываю с помощью ajax onchange = "" в выпадающем меню, кажется, загружается дважды, и к контенту не обращаются.

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

Я выяснил, что происходит, он вызывает функцию один раз, с запрошенным идентификатором цены подписки (alert (planId);), и это эхоотлично, как я этого хотел.Затем он просто вызывает функцию снова, но предупреждение (planId);возвращает мне undefined и echo - новая строка (которая должна была произойти) с кодом ошибки, говорящим, что запрос sql не выполнен из-за строки 78.

Что возвращает меня к моему вопросу, почему AJAX вызываетфункция дважды?

var xhr = {
    planData:function(){
        if (httpRequest.readyState==4) {
            if (httpRequest.status==200) {
                document.getElementById('plan_select').innerHTML = 'ready';
                var price = httpRequest.responseText;
                //alert(price);
                var six = 6*parseInt(price);
                var year = 12*parseInt(price);
                if (document.getElementById('diff')) {
                    var ctnt = '';
                    ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="one" />&nbsp;';
                    ctnt += 'Month to month subscription plan ($'+price+' USD per month) &nbsp;';
                    ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="six" />&nbsp;';
                    ctnt += 'Six months subscription plan ($'+six+' USD per 6 months) &nbsp;';
                    ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="year" />&nbsp;';
                    ctnt += 'One year subscription plan ($'+year+' USD per year)';
                    document.getElementById('diff').innerHTML = ctnt;
                } else {
                    var yearPrices = document.getElementById('order').insertRow(3);
                    var cell = yearPrices.insertCell(0);
                    cell.id='diff';
                    cell.colSpan = 3;
                    var ctnt = '';
                    ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="one" />&nbsp;';
                    ctnt += 'Month to month subscription plan ($'+price+' USD per month) &nbsp;';
                    ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="six" />&nbsp;';
                    ctnt += 'Six months subscription plan ($'+six+' USD per 6 months) &nbsp;';
                    ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="year" />&nbsp;';
                    ctnt += 'One year subscription plan ($'+year+' USD per year)';
                    cell.innerHTML = ctnt;
                }
            }
        }
    },
    updatePrice:function(planId){
        alert(planId);
        xhr.ajaxCall('GET', 'requests.php?action=getprices&planId='+planId, null, true, xhr.planData);
    },
    ajaxCall:function(method,url,postData,async,handler) {
        httpRequest = new XMLHttpRequest();
        httpRequest.open(method,url,async);
        if (postData != null)
            httpRequest.setRequestHeader("Content-Type","x-www-form-urlencoded");
        if (async)
            httpRequest.onreadystatechange = handler;
        httpRequest.send(postData);
    }
};

Это часть кода, вы увидите предупреждение (planId);в функции updatePrice.

Вот ссылка на фактическую работающую вещь: http://www.nitroflox.com/temp/

1 Ответ

4 голосов
/ 20 марта 2011

Я только что посмотрел на предоставленную ссылку. Вы вызываете функцию updatePrice дважды:

onchange="xhr.updatePrice(xhr.updatePrice(this.options[this.selectedIndex].value))

Изменить на:

onchange="xhr.updatePrice(this.options[this.selectedIndex].value)

Дайте мне знать, если это работает.

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