繁体   English   中英

为什么我的Ajax无法异步工作

[英]why won't my ajax work asynchronously

我无法理解为什么我的代码无法异步工作。

异步运行时,即使警报之前输出唯一的$ _GET值,get_price.php始终会收到相同的$ _GET值。

var arraySize = "<? echo count($_SESSION['items']); ?>"; //get items count
var pos = 0;
var pid;
var qty;

getPriceAjax();
function getPriceAjax()
{
    pid = document.cartItemForm.elements[pos].id;    //product id
    qty = document.cartItemForm.elements[pos].value; //quantity
    alert('Product: ' + pid + ' Quantity: ' + qty);

    $.ajax({
        url:"includes/ajax_php/get_price.php",
        type:"GET",
        data:'pid='+pid+'&qty='+qty,
        async:true,
        cache:false,
        success:function(data){

            while(pos < arraySize)
            {                        
               document.getElementById(pid + 'result').innerHTML=data;
                pos++;
                getPriceAjax();
            }
        }
    })  
}

我处理过类似的问题。 我不太记得发生了什么,所以这个答案可能不太有用。 您的服务器可能正在缓存响应。 尝试使用POST。

尝试在您的获取URL中添加一些随机数,以使服务器不会对其进行缓存,如下所示:

url:"includes/ajax_php/get_price.php&rnd=" + Math.floor(Math.random()*10000)

这也可能是时间问题。 由于它是异步的,因此它可能会逐步循环并在值返回之前发出警报。 您的pos计数器在返回之前不会递增,因此您将始终获得pos = 0的价格,直到您的电话回来。 我会将增量器移到成功函数之外。 另外,尝试将警报移至成功功能的内部。

function getPriceAjax()
{
    pid = document.cartItemForm.elements[pos].id;    //product id
    qty = document.cartItemForm.elements[pos].value; //quantity

    $.ajax({
        url:"includes/ajax_php/get_price.php",
        type:"GET",
        data:'pid='+pid+'&qty='+qty,
        async:true,
        cache:false,
        success:function(data){

            while(pos < arraySize)
            {
                alert('Product: ' + pid + ' Quantity: ' + qty);                        
                document.getElementById(pid + 'result').innerHTML=data;                
                getPriceAjax();
            }
        }
    });
    pos++;
}

递归几乎击败了我...

而不是使用while循环,它应该是if条件语句。

while(pos < ArraySize)错误! -执行第一组参数arraySize次。

if(pos < ArraySize)正确! -执行第一个,然后执行第二个,依此类推...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM