为什么我的ajax不会异步工作

时间:2010-04-20 18:34:29

标签: php ajax

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

当异步运行时,get_price.php总是会收到相同的$ _GET值,即使警报输出一个唯一的$ _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();
            }
        }
    })  
}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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++;
}

答案 2 :(得分:0)

递归几乎打败了我......

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

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

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