javascript - 使用ajax实时更新javascript变量

标签 javascript jquery ajax function

我有一个需要进行数值计算的 javascript 函数。此计算中使用的一些数字存储在数据库中,它们会根据用户填写在线表格的方式而有所不同。用户填写完表格后,他们将单击“计算”按钮。此时,在 JS 函数中,我想使用 ajax 从数据库中获取与用户选择的其他值相对应的值。

举个简单的例子:有 3 种尺寸的 T 恤,根据每种尺寸(存储在数据库中)有不同的价格。用户选择尺码,当他们点击“计算”时,我使用 ajax 获取与他们选择的尺码相关联的价格。

问题是,我想使用 ajax 来更新我稍后将在脚本中使用的一些变量。我现在尝试这样做的方式不起作用,脚本中的变量没有从 ajax 更新,我只能在 ajax 的 success 函数中访问数据库中的值称呼。我理解这是因为ajax本质上是异步的,需要一些时间,等待服务器返回数据,而函数仍然继续运行

在下面的示例中,ajax 调用返回 JSON 数据,我有一个名为 isjson() 的函数来测试返回的字符串是否实际上是 JSON 数据。

示例代码:

function calculate_cost(){

    var price = 0;
    var size = $('form#tshirt_form [name="size"] option:selected').val();
    $.ajax({
        url:'my_script.php',
        type:'post',
        data:'select=price&table=tshirts.prices&where=size = "' + size + '"',
        success:function(data){
            if(isjson(data)){
                data = $.parseJSON(data);
                data = data[0];
                price = data['price'];
            }else{
                //display error getting data
            }
        }
    });
    //  continue code for calculation
    //  this alert will display "0", but I want the price from the database in there
    alert(price);
    //perhaps do other ajax calls for other bits of data
    //...
    return final_price;
}

有谁知道我怎样才能做到这一点,用 ajax 实时更新变量?

非常感谢!

** 编辑 **

谢谢大家的帮助,ajax是异步的,我明白了。我真的很想要一个不需要在 success 函数中继续计算的答案,因为我的实际问题涉及来自很多不同表的许多值。我还希望能够在未来扩展计算而不会变得太复杂。如果这是不可能的,那么我将不得不忍受这一点。 ;-)

** 编辑 2 **

好的,我们得到了答案:当然它就在文档页面的顶部附近,:-/对此感到抱歉。 jQuery ajax 调用中的 async 属性。 http://api.jquery.com/jQuery.ajax/

最佳答案

那是因为ajax默认异步执行请求,在控件到达alert(price)之前;请求还没有执行,price 仍然保留旧值。

如果你想同步执行,那么你可以设置async为false。

$.ajax({
    async: false,
    .....
    .....
});

关于javascript - 使用ajax实时更新javascript变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9978449/

相关文章:

jquery - 剑道网格 : disable row edit

javascript - 如何使用混合 webapp(MPA 和 SPA 结合)

php - 如何使用 AJAX 将数组发布到 PHP?

javascript - 如何从 json 对象数组中删除整个 json 对象并将其写入文件?

javascript - 如何获取工具提示 Highcharts 中的多个系列数据?

javascript - 如何将链接文本中的 Font Awesome 图标替换为链接点击时的不同图标?

jquery - 通过 $.ajax 将多个变量传递给 beforeSend 函数

javascript - 如何检查是否在 jQuery 中选中了复选框?

javascript - 将 Node 变量从 Jade 传递到包含的 html?

jquery - 提高 box-shadow 的性能