2011-05-05 2 views
4

필자는 긴 폴링을 수행하고 "밀어 넣은"실시간 데이터를 가져와야하는 기능을 만들었습니다. 지금은 데이터를 받으면 보이는 방식으로 포맷 된 json 객체에 대해 테스트하고 있습니다. 지금까지 정확하게 작동하고있는 것 같습니다. 나는 당신이 그것에 대해 어떻게 생각하는지 궁금해하고 있었습니까? 어떻게 든 리팩토링하거나 다른 방식으로 완전히 리터럴 할 수 있습니까?정확한 긴 폴링 예제?

var url = '../../path_to_script/respondents.json'; 

function fetchData() { 
    $.ajax({ 
    url: url, 
    method: 'GET', 
    dataType: 'json', 
    contentType: "application/json; charset=utf-8", 
    cache: false, 
    success: function (data) { 
     //parseData(data); 
     setTimeout(function() { fetchData() }, 5000); 
     console.log(data); 
    }, 
    error: function (data) { 
     setTimeout(function() { fetchData() }, 5000) 
    } 

}); 

} 

감사

답변

1

나는 methodtype에, method$.ajax에 대한 유효한 매개 변수가 아닌 일부 변경

  • 이 변화 할 것입니다. dataType: 'json'에 오류가있을 때
  • 뭔가를 그 가치가 충분하다으로이 오류
  • 을 제거 contentType입니다. 필요할 경우 오류 매개 변수를 사용하십시오. 예 :

.

error: function (xhr, status, errorThrown) { 
    alert("There was an error processing your request.\nPlease try again.\nStatus: " + status); 
} 

희망이 있습니다. 건배

+0

입력 해 주셔서 감사합니다. 또한 contentType이 약간 중복 될 수 있다고 생각했습니다. 좋은 생각도 오류 매개 변수를 사용하여, 내가 할 것입니다. 감사합니다 – Tim

3

예상대로 작동합니다. 요청이 반환되면 setTimeout을 현명하게 선택 했으므로 "중복"요청을 할 수 없습니다. 그것은 좋은 일입니다.

어쨌든 jQuerys의 "지연된"ajax 객체를 사용할 수 있습니다.이 객체는 아마도 좀 더 편리 할 것입니다.

(function _poll() { 
    $.getJSON(url).always(function(data) { 
     console.log(data); 
     _poll(); 
    }); 
}()); 

: .always()이 BRANDNEW입니다 (jQuery를 1.6).

편집

예 :

success: function (data) { 
    console.log(data); 
}, 
complete: function() { 
    setTimeout(function() { fetchData() }, 5000) 
} 

complete 이벤트는 항상 성공과 오류가 발생한 후 호출됩니다 http://jsfiddle.net/rjgwW/6/

+0

좋아, 흥미 롭습니다, 분명히 jQuery 1.6에서 업데이트되지 않았습니다. 한가지, setTimeout, 같은 방식으로 계속 하시겠습니까? – Tim

+0

나는 당신의 모범을 보았습니다. 그러나 나는 정말로 그것을 작동시키지 않습니다. 그것이 당신에게 어떻게 보이는지 예를 게시 할 수 있습니까? 감사합니다 – Tim

+0

@ 팀 : 예제 링크를 사용하여 답변을 업데이트했습니다. 이 예제는 또한 요청을 지연시키기 위해'setTimeout'을 다시 포함합니다. – jAndy

2

난에 이벤트를 변경하는 것이 좋습니다. 이렇게하면 setTimeout 행이 한 번만 표시되므로 더 좋습니다.

관련 문제