为什么我的ajax加载两次相同的功能?

时间:2011-03-20 17:35:43

标签: php javascript ajax

我正在尝试创建一个订阅表单,基本上让你选择一个游戏,然后为该游戏加载一堆订阅价格。到目前为止,一切都很完美。问题是,当我尝试输入3个单选按钮来选择1个月/ 6个月/ 1年的付款时,我在下拉列表中用ajax onchange =“”调用的函数似乎加载了两次,并且内容未被访问

第一次,它完美地工作,它回显信息,并计算一切。但第二次,它只是给了我一个PHP错误。

我已经弄清楚会发生什么,它会使用所请求的订阅价格ID(alert(planId);)调用该函数一次,并且它完全符合我想要的回声。然后它再次调用该函数,但是警报(planId);返回我未定义,并使用错误代码回显一个新行(这意味着发生),说由于第78行sql请求失败。

这让我回到我的问题,为什么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 个答案:

答案 0 :(得分:4)

我只看了你提供的链接。您正在调用updatePrice函数两次:

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

更改为:

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

让我知道它是否有效。