Вернуть результаты Ajax-запроса в Coffeescript - PullRequest
1 голос
/ 06 февраля 2012

Все еще разбираюсь в CoffeeScript и вижу, на что он способен.

Я написал метод, который выполняет вызов ajax, и я хочу вернуть результаты.

Например:

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

и я хочу вернуть данные. Есть ли умный способ сделать это в CoffeeScript или мне просто нужно объявить переменную?

Спасибо

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

Вы действительно не можете вернуть данные AJAX-запроса таким образом, поскольку он асинхронный.Это означает, что к тому времени, когда будет вызван успешный обратный вызов, ваш метод 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.

0 голосов
/ 06 февраля 2012

Как уже упоминалось, это связано с асинхронной природой 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, которые также можно использовать для аналогичных целей.Но имейте в виду, что браузер может выглядеть «зависшим», пока ваш скрипт ожидает данных (не уверен, продолжает ли функция «defer» обрабатывать события javascript или нет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...