2014-01-15 2 views
0

Я использую AJAX для отправки коллекции, связанной с JSON. Он декодируется, проверяется и сохраняется на сеансе.Coffescript, Backbone - jQuery.ajax done callback function scope

Он работает в Firefox - $ _SESSION ['key'] доступен, он не работает в Chrome.

Я думаю, что проблема с AJAX сделана стрельбой слишком быстро, когда я использую window.location.href = 'checkout'. Я хотел исправить это, но я не могу войти из сделанного обратного вызова или из метода ajaxdone.

Я не понимаю, почему добавление '=>' не помогает. Он кэширует весь объект до этого, не так ли?

send: (data) -> 
    console.log this 
    jQuery 
    .ajax({ 
     type: "POST", 
     url: 'checkout', 
     data: {order: data}, 
     dataType: 'json', 
     done: (data) => 
     this.ajaxdone() 
    }) 
    this 

ajaxdone: -> 
    #window.location.href = 'checkout' 
    console.log this 
+0

Вы должны «откормить» другой стрелки: 'отправить: (данные) =>' – Tallmaris

+0

Вы должны лучше использовать Магистральные методы вместо переписывания собственных вызовов/обратных вызовов ajax [вы можете, например, переопределить метод синхронизации). – moonwave99

+0

@ moonwave99 Думаю, я должен, но реальный вопрос: что мне делать, чтобы успешно выполнить console.log изнутри обратного вызова? Мне показалось, что я понимаю, как работает JS, кажется, нет. –

ответ

1

Там нет done варианта $.ajax. Существует опция complete, которая называется

вызывается при завершении запроса (после успешного выполнения и обратных вызовов ошибок).

так может быть, вы имеете в виду:

jQuery.ajax(
    #... 
    complete: => @ajaxdone() 
) 

вместо этого. Существует done метод на jqXHR так что вы могли бы сказать:

jQuery.ajax(
    #... 
).done => @ajaxdone() 

но done является «Альтернативная конструкция с возможностью success обратного вызова», поэтому он не будет вызываться, если произошла ошибка. Если вы хотите ajaxdone всегда дозвонились затем использовать always (который действует как вариант complete):

jQuery.ajax(
    #... 
).always => @ajaxdone() 
+0

Спасибо! Это сделал трюк. –