Я пытаюсь создать форму подписки, которая в основном позволяет вам выбрать игру, а затем загрузить кучу цен на подписку для этой игры.До этого момента все отлично работало.Проблема в том, что когда я пытаюсь ввести 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" /> ';
ctnt += 'Month to month subscription plan ($'+price+' USD per month) ';
ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="six" /> ';
ctnt += 'Six months subscription plan ($'+six+' USD per 6 months) ';
ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="year" /> ';
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" /> ';
ctnt += 'Month to month subscription plan ($'+price+' USD per month) ';
ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="six" /> ';
ctnt += 'Six months subscription plan ($'+six+' USD per 6 months) ';
ctnt += '<input class="radio" type="radio" name="typeOfPlan" value="year" /> ';
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/