2013-07-26 3 views
0

cache.manifest를 사용하여 오프라인 사용을 위해 관련 파일을 캐시하는 웹 페이지를 개발 중입니다. 그러나 실제로 인터넷에 연결되어 있는지 감지 할 수 있어야합니다. if (! navigator.onLine)은 어느 정도까지만 작동합니다. 실제로는 그렇지 않을 때 온라인이라고 말합니다. 그 때문에 호출이 성공하면 true를 반환하는 아약스 호출을 작성하려고합니다. 그렇지 않으면 실패합니다. 저는 jQuery에서 마스터가 아닙니다. 그러나 이것은 제가 지금까지 가지고있는 것입니다. 나는 여러 가지 대안을 시도했지만, 항상 "정의되지 않은"결과로 끝납니다.연결을 확인하는 함수를 만들려고 시도합니다.

function checkIfOnline() { 
var returned = true; 
$.get('services/getObjects.ashx', 
     { 
      "get": "heartbeat", 
      "hash": userHash, 
      "uid": uid, 
      "gid": gid 
     }, 
     function (data) { 
      if(data.result === "Success") { 
       alert("Success"); 
      } 
      console.log(data.result); 
     }, 
     "json" 
    ) 
.done(function() {alert("done"); 
        returned = true; 
        return returned;}) 
.fail(function() {alert("fail"); 
         returned = false; 
         return returned;}); 

} 내가 뭘 잘못 볼 수 밖에

누구? 경고는 모두 그들이 무엇을하기로되어 있는지 보여줍니다 ... 나는 연결에 따라 "성공"경고를 받고 "완료"또는 "실패"합니다. 지적 된 스레드를 바탕으로

업데이트

, 내 코드

function checkIfOnline() { 
    return $.ajax({ 
    type: 'GET', 
     url: 'services/getObjects.ashx', 
     data: 
     { 
      "get": "heartbeat", 
      "hash": userHash, 
      "uid": uid, 
      "gid": gid 
     } 
    }); 
} 

function getOnlineStatus() { 
checkIfOnline().done(function(result) { 
    alert("done - "+result.result); 
    return true; 
}).fail(function() { 
    alert("failed"); 
    return false; 
}); 
} 

을 다음과 같이 변경했다하지만 난 여전히 얻을이 성가신 "정의되지 않은"하지만 둘 다 참 또는 거짓 (getOnlineStatus()를 호출 할 때)

+0

http://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success [AJAX를 호출의 응답을 반환하는 방법?] (HTTP의 –

+0

가능한 중복 : //stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Mangiucugna

+0

ashx 처리기에서 무엇을 반환합니까? –

답변

0

틀린 것을 반환합니다. done 및 fail 함수에서 반환하는 대신 get 호출 외부에서 값을 반환하십시오.

function checkIfOnline() { 
var returned = true; 
$.get('services/getObjects.ashx', 
     { 
      "get": "heartbeat", 
      "hash": userHash, 
      "uid": uid, 
      "gid": gid 
     }, 
     function (data) { 
      if(data.result === "Success") { 
       alert("Success"); 
      } 
      console.log(data.result); 
     }, 
     "json" 
    ) 
.done(function() {alert("done"); 
    returned = true; 
}) 
.fail(function() {alert("fail"); 
    returned = false; 
}); 

return returned; 
} 

UPDATE :

위의 대답은 완전히 정확하지 않습니다. 이에 stumle 사람들을 위해이 answer

function foo() { 
    return $.ajax(...); 
} 

foo().done(function(result) { 
    // code depending on result 
}).fail(function() { 
    // an error occurred 
}); 
+0

물론! 내게 그걸 지적 해 주셔서 고맙습니다. 지금은 매력처럼 작동합니다. –

+0

도와 드리겠습니다. :) –

+0

추가 테스트를 마친 후에 올바른 문장을 반환하는 데 여전히 문제가 있습니다. 비동기로 인해이 함수는 항상 초기 값을 반환하지만 .done 및 .fail은 return 문 다음에 실행됩니다. 그래서 기본적으로 항상 true를 반환합니다 –

0

에서 언급 한 바와 같이 올바른 구현은 연기 객체를 사용하는 것입니다. 지연된 방법을 사용하여이 작업을 수행 할 수 없습니다.

나는 간단히 basisc로 돌아가 정확히 내가 원하는 방식으로 작동하도록했습니다. 다음은 내가 사용한 코드입니다.

function checkIfOnline() { 
var response = false; 
$.ajax({ 
    type: 'GET', 
    url: 'services/getObjects.ashx', 
    async: false, 
    data: 
     { 
      "get": "heartbeat", 
      "hash": userHash, 
      "uid": uid, 
      "gid": gid 
     }, 
    success: function(data) { 
     if(data.result === "Success") { 
      response = true; 
      } 
     } 
    }); 
return response; 
} 
관련 문제