Переменные не установлены до тех пор, пока не будет запущен этот обратный вызов (когда сервер возвращается с данными 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 );
}
В любом случае остается верным то, что вам нужно запускать все, что использует данные , как только у вас есть данные , всеасинхронные операции похожи на это.