0

を介してデータベース内の国 ID に関する情報を要求する関数を作成しようとしています。これは、照会したテーブルajaxでデータが表される方法であるためです。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プッシュしているようです。呼び出しをプッシュする前に関数の先頭にいくつか追加したところ、次の情報が生成されました。ajaxrequestsconsole.log()ajax

Correspondence_Country__c
a063000000CZoZHAA1
Country_of_Residence__c
a063000000CZoZHAA1 
4

1 に答える 1

2

$.ajax非同期です(特に言わない限り、あなたはしたくありません)。つまり、ajax 呼び出しが完了する前にループが終了します。そして、その ajax 呼び出しが最終的に終了すると、「キー」は配列の最後の値になります。(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
于 2013-08-22T16:52:56.170 に答える