CoffeescriptでAjaxリクエストの結果を返します

まだCoffeeScriptの周りに頭を浮かべて、その能力を見ています。

私はajax呼び出しを行うメソッドを書いており、結果を返すことを望んでいます。

例えば:

GetViewedItem: (foo) ->
    $.ajax '/Foo/Bar/',
    type: 'GET',
    data: { id: $(foo).data('fooId') }
    success: (data) ->
        data

私はデータを返したい。 CoffeeScriptでこれを行う巧妙な方法はありますか、変数を宣言するだけですか?

ありがとう

1
非同期を同期に「転換」することを意味しますか? 追加された 著者 tokland,

2 答え

非同期なので、AJAXリクエストでデータを返すことはできません。つまり、成功コールバックが呼び出されるまでに、<​​code> GetViewedItem メソッドの実行が完了したことになります。

通常は、成功コールバックのAJAXデータで何をする必要があれば何でもやり直します。それに応じてデータを処理する成功コールバックのメソッドを呼び出します。

handleViewedItem: (data) ->
   //Do something now that the AJAX call is complete.

GetViewedItem: (foo) ->
    $.ajax '/Foo/Bar/',
        type: 'GET',
        data: { id: $(foo).data('fooId') }
        success: (data) ->
            handleViewedItem data

これはおそらく、JSとAJAXを使用するときに理解する最も重要な概念の1つです。

5
追加された
申し訳ありませんが、私は謙虚に聞こえることを意味しませんでした。私は一般的な言葉で将来の読者を助けるために質問に答えようとします。
追加された 著者 Sandro,
関数を非同期にする必要がある場合、データを実際に返すことはできません。
追加された 著者 Sandro,
これを完全に認識している。 coffeescriptがこのコードをレンダリングするファンシーな方法を持っているかどうかは分かりませんでした。私は推測していない?
追加された 著者 mat-mcloughlin,
心配しないで、それはまったく憂慮していませんでした。私は私の質問をとてもうまく説明したとは思わない。
追加された 著者 mat-mcloughlin,
説明サンドロのおかげで、私は多くを助けた。
追加された 著者 tmartin314,

すでに述べたように、これはブラウザの非同期の性質のJavaScriptと関係がある。 CoffeeScriptには、これを直接処理する(async/deferを追加する) "パッチ"があります。 http:// maxtaco.github.com/coffee-script/ あなたの例としては、それは私の理解に基づいて私の側に推測のようなものになるでしょう:

GetViewedItem: (foo) ->
  await $.ajax '/Foo/Bar/'
    type: 'GET'
    data: { id: $(foo).data('fooId') }
    success: defer data
  data

同様の目的でも使用できる他の数多くのjavascriptライブラリもあります。しかし、スクリプトがデータを待っている間にブラウザーが「ハング」しているように見えることがあることに注意してください(「遅延」機能がJavaScriptイベントを処理しているかどうかはわかりません)。

0
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript