我有以下javascript:
$.getJSON('/calculate_quote/' + moulding_1_id, function(data) {
moulding_1_cost = data.moulding.cost;
moulding_1_width = data.moulding.width;
});
cost_of_moulding = ( ( 2 * ( width + ( 2 * moulding_1_width ) ) + 2 * ( height + ( 2 * moulding_1_width ) ) ) / 1000 ) * moulding_1_cost;
$('#item_total').html( cost_of_moulding );
问题是在getJSON调用之外未定义两个变量moulding_1_cost
和moulding_1_width
。如何在getJSON调用之外使这两个变量可用?
答案 0 :(得分:7)
变量不是 set ,直到该回调运行(当服务器返回JSON数据时),所以你需要调用从该回调中使用它们的任何代码,如下所示:
$.getJSON('/calculate_quote/' + moulding_1_id, function(data) {
var moulding_1_cost = data.moulding.cost;
var moulding_1_width = data.moulding.width;
var cost_of_moulding = ( ( 2 * ( width + ( 2 * moulding_1_width ) ) + 2 * ( height + ( 2 * moulding_1_width ) ) ) / 1000 ) * moulding_1_cost;
$('#item_total').html( cost_of_moulding );
});
或者调用另一个这样的函数:
$.getJSON('/calculate_quote/' + moulding_1_id, function(data) {
someFunction(data.moulding.cost, data.moulding.width);
});
function someFunction(mqc, m1w) {
var cost_of_moulding = ( ( 2 * ( width + ( 2 * m1w) ) + 2 * ( height + ( 2 * m1w) ) ) / 1000 ) * m1c;
$('#item_total').html( cost_of_moulding );
}
在任何一种情况下仍然如此,你需要触发数据一旦使用了数据,所有异步操作都是这样的。
答案 1 :(得分:0)
您应该在getJSON调用中执行所有操作,以确保它以正确的顺序发生。
答案 2 :(得分:0)
事实上,它们没有未定义(代码执行后)。通过跳过var
关键字,这些名称将直接进入全局范围(在大多数情况下......为window
)。因此,一旦执行了这段脚本,您就可以从脚本的任何位置访问window.moulding_1_cost
。
这很可能就是你的问题,时机。由于这是ajax request
的成功处理程序,因此该代码以异步方式运行,因此不会立即执行。
要解决这个问题,最好自己使用回调函数。尼克克拉弗的答案在这方面有很好的证明。
答案 3 :(得分:-2)
添加
var moulding_1_cost;
var moulding_1_width;
在任何javaScript函数之外;)