调用函数时,在函数内发送ajax请求会被延迟

时间:2014-12-12 18:57:16

标签: javascript jquery ajax

当按下按钮时尝试从JSON获取数据,并且由于某种原因,我第一次按下按钮时出现错误,然后如果再次点击它,我会得到弹出窗口,但ID为第一次按下。我明白它在做什么,但我不知道为什么。

数据:

 id: 1, price: 5.00;
 id: 2, price: 9.30;

脚本:

function updateStock(id){

$.ajax({
    url: 'json.watching.php?id=' + id,
    dataType: 'json',
    cache: false,
    success: function(data) {
        price = data.price;
    }
});

    $('#dialog-popup').html("<div align='center'>id: " + id + ". Price: " + price + "</div>");
    $("#dialog-popup").dialog("open");
}

按钮:

<button onclick="updateStock(1)" style="button">Button 1</button>
<button onclick="updateStock(2)" style="button">Button 2</button>

第一次按下按钮时,我得到了Uncaught ReferenceError:未定义价格,但如果我再次按下它,我会得到数据,但是从按钮的ID开始按下它。因此,如果加载页面并按下第一个按钮我得到错误,如果我按下相同的按钮我得到正确价格的弹出窗口,但是如果我按下第二个按钮,我的弹出窗口响应&#34; id:2。价格:5.00&#34;。 id是正确的但ajax数据来自上一次按下按钮并且不更新变量。

1 个答案:

答案 0 :(得分:0)

Ajax是异步的,所以你要在它设置之前读取它。将对话框调用移至成功调用内部。

function updateStock(id){
  $.ajax({
    url: 'json.watching.php?id=' + id,
    dataType: 'json',
    cache: false,
    success: function(data) {
        price = data.price;
        $('#dialog-popup').html("<div align='center'>id: " + id + ". Price: " + price + "</div>");
        $("#dialog-popup").dialog("open");
    }
  });
}