2016-08-15 2 views
0

localhost에서 API를 호출하는 페이지에 로딩 회 전자를 추가하고 있습니다. 그것은 jQuery를 $의 아약스 함수를 사용하고 콜백을 호출하지만, 어떤 일이 일어나고 있음을 사용자에게 표시하지, 작동CoffeeScript : Callback.call Not Working

getDocumentContents: (id, callback) -> 

    $.ajax(
    url: 'http://127.0.0.1:5000/doc/' + id 
    type: 'GET' 
     contentType: 'application/json' 
     success: callback 
) 

: 같은 이전 코드를 보았다.

추가/제거하고 수동으로 콜백을 호출하는 스피너 클래스에 대한 코드를 추가해도 작동하지 않습니다. 스피너가 나타납니다 예상대로 사라지지만 콜백은 결코 트리거하지 않고 JS 오류가 내 콘솔에 표시되지 :

getDocumentContents: (id, callback) -> 

    $.ajax(
    url: 'http://127.0.0.1:5000/doc/' + id 
    type: 'GET' 
     contentType: 'application/json' 
     beforeSend: -> 
     $('#sidePanelBody i.article-spinner').addClass('fa fa-spinner fa-pulse fa-3x fa-fw') 
    success: -> 
     $('#sidePanelBody i.article-spinner').removeClass('fa fa-spinner fa-pulse fa-3x fa-fw') 
     callback.call 
) 

내가 잘못을하고있는 중이 야 뭐?

+1

(1) 그게 진짜 들여 쓰기입니까? (2)'callback.call'은 단순히 함수 참조 인'callback.call()'입니다. OTOH는 인자가없는 함수 호출입니다. 인수가없는 경우 CoffeeScript에서 함수 호출 괄호가 필요합니다. –

+0

예, 이것이 문제의 일부였습니다. 정상적으로 조용히 성공 호출에 전달되는 매개 변수 이름을 빠뜨린 것처럼 보입니다. 나는 대답을 쓸거야. – huertanix

답변

0

Mu가 지적했듯이 함수 호출은 .call 대신에()가 필요합니다. 나는 CoffeeScript가 paren을 원하지 않는다는 가정하에 후자의 구문을 사용했습니다. 이전에 자동으로 전달 된 "데이터"매개 변수가 누락되어 있었고 이제는 콜백 호출뿐만 아니라 함수 종료에서도 명시 적으로 선언해야합니다. 이 코드는 작동합니다 :

success: (data) -> 
    $('#sidePanelBody i.article-spinner').removeClass('fa fa-spinner fa-pulse fa-3x fa-fw') 
    callback(data)