我无法理解为什么我的代码不能异步工作。
当异步运行时,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();
}
}
})
}
答案 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)
正确! - 执行第一个,然后执行第二个,依此类推......