2011-12-30 3 views
0

부드럽 지 않을 때까지 내 머리를 때렸다. 전문가와상의 할 시간!어떻게 클라이언트 측 AJAX 폴링을 설정합니까?

내 응용 프로그램은 여러 Delayed :: Jobs를 생성합니다. 실행중인 작업 상태에 대한 시각적 피드백을 사용자에게 제공하고 싶습니다. 그래서 내가 작업 < 이름, 상태 (유휴, QUEUED, 실행, 성공, 실패) 및 상태 문자열을 가지고 상태 및 상태가 일반적으로 비동기 적으로 업데이 트됩니다 ActiveRecord :: Base 모델이 있다고 가정합니다.

또한 작업 상태를 표시 할 장소로 <div id='job-status'></div> 요소가있는보기 템플리트를 가정합니다. 아, 또한 jQuery와 함께 Rails3을 사용한다고 가정합니다.

최대의 휴대 성을 위해 자바 스크립트에서 시작한 클라이언트 측 폴링을 사용하고 싶습니다. 자바 스크립트 (jQuery 메서드, setTimeout 등)를 약간 알고 있지만 레일스와 jQuery 함수를 합리적인 방법으로 조합 한 것을 찾지 못했습니다.

이름, 상태 및 상태가있는 ActiveRecord 작업 모델이 있다면 간단하게 컨트롤러/jobs_controller.rb에 넣을 것이고 구현할 뷰/작업은 무엇입니까? 그리고 서버가 html이나 JSON 또는 XML을 생성하여 # job-status div를 업데이트합니까? (나는 이것이 일련의 질문이라는 것을 알고 있습니다. 나는 완벽한 대답을 기대하지 않고 함께 모으기에 충분할 것입니다.)

고마워요.

답변

2

jquery를 사용하여 데이터를 보내는 제어기의 json 사용 가능 메소드로 ajax 호출을해야합니다. 당신이 여기 $("#somediv").html(ajax_result)

같은 방법으로 효과 DIV 요소의 내용을 업데이트 할 수 데이터를 사용하여

실제 샘플입니다 :

var linkHtml = $("#searchNumber").html(); 
$("#message").empty(); 
var aurl = "/Prospect/SearchNumberAuth?number=" + $("#MSISDN").val() ; 
$.ajax({ 
    dataType: 'json', 
    type: "GET", 
    url: aurl, 
    async: false, 
    contentType: "application/json; charset=utf-8", 
    beforeSend: function() { 
     $("#holdNumber").fadeOut("slow"); 
     $("#searchNumber").empty().html("<image src='../../Content/images/jquery-ui/load-indicator.gif'/>"); 
    }, 
    success: function(response) { 
     $("#message").fadeIn(1500).html(function() { 
      if (response[0] == "Exist") { 
       $("#holdNumber").fadeIn("slow"); 
       $("#MSISDN").attr("readonly", "readonly"); 
       $("#searchNumber").fadeOut("slow"); 
       return existMsg; 
      } else if (response[0] == "Sold") { 
       $("#searchNumber").empty().html(linkHtml).fadeIn("slow"); 
       return soldMsg; 
      } else if (response[0] == "Hold") { 
       $("#searchNumber").empty().html(linkHtml).fadeIn("slow"); 
       return holdMsg; 
      } else 
       $("#searchNumber").empty().html(linkHtml).fadeIn("slow"); 
      return notExistsMsg; 
     }); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     $("#searchNumber").empty().html(linkHtml).fadeIn("slow"); 
    }, 
    complete: function() { 
    } 
}); 

그리고 여기 컨트롤러 클래스에서 서버 측 코드입니다 수 쉽게 레일에 이식 할 :

public JsonResult SearchNumberAuth(long number) 
    { 
     return this._searchNumber(number); 
    } 

_searchNumebr 방법 나는 JsonResult을 반환하는 .

페르시아어이지만 자세한 내용은 website으로 볼 수 있지만 ProspectView.js에서 FireBug로 js 코드를 볼 수 있고 두 번째 탭에서 결과를 볼 수 있습니다.

+0

Jani : +1 질문에 대한 3 분의 1 주소 : 서버 => 클라이언트 응답 JSON을 사용하십시오. 고마워. 하지만 내가 붙어있는 다른 부분은 (a) 레일스 컨트롤러 또는 뷰에서 JSON을 구성하는 방법과 (b) 주기적 폴링을 시작하고 중지하는 방법입니다. –

관련 문제