我正在尝试创建一个函数,通过ajax
在我们的数据库中请求有关Country ID的信息,因为这就是我查询的address
表中数据的表示方式。也就是说,在address
表中,表示国家/地区的id
而不是国家/地区名称,实际的国家/地区名称位于我查询的另一个表中。
发送ajax
请求后,我创建了一个我收到的地址字符串。但是,它只更新对象的最后一个值而不是所有这些值。这是我的咖啡因:
requests = Array()
for key, val of {'Correspondence_Country__c':data['Correspondence_Country__c'], 'Country_of_Residence__c': data['Country_of_Residence__c']}
console.log(key)
console.log(val)
requests.push($.ajax
url: window.location.pathname
type: 'post'
dataType: 'json'
data: 'search_id=' + val + '&search_column=Id&sobject=Country__c&columns=["Name"]'
error: (jqXHR, textStatus, errorThrown) ->
alert('Error: ' + textStatus + ': ' + errorThrown)
success: (c_data, textStatus, jqXHR) ->
data[key] = c_data['Name']
console.log(c_data['Name'])
console.log(key)
)
defer = $.when.apply($, requests)
我省略了defer.done
功能。 console.log信息的结果如下:
China P.R.
Country_of_Residence__c
China P.R.
Country_of_Residence__c
而不是预期的
China P.R.
Correspondence_Country__c
China P.R.
Country_of_Residence__c
我的Coffeescript有问题吗?
编辑:看起来它与ajax
请求或将ajax
请求推送到requests
数组有关。在推送console.log()
调用之前,我在函数开头添加了几个ajax
,它产生了以下信息:
Correspondence_Country__c
a063000000CZoZHAA1
Country_of_Residence__c
a063000000CZoZHAA1
答案 0 :(得分:2)
$.ajax
是异步的(除非另有说明,但您不想这样做)。这意味着循环将在ajax调用完成之前结束。当ajax调用最终结束时,“key”将是数组的最后一个值。 (JS没有块范围)。
使用咖啡do
保持正确的值。
for key, val of {'Correspondence_Country__c':data['Correspondence_Country__c'], 'Country_of_Residence__c': data['Country_of_Residence__c']}
do (key) ->
# your code