2011-02-16 3 views
0

함수에서 객체를 반환하려고하면 정의되지 않습니다. 그리고 나는 그 객체가 비어 있지 않다는 것을 확신합니다. 그렇지 않으면 alert(response.html);이 작동해서는 안됩니다.Json 객체를 반환 할 수없는 이유는 무엇입니까?

var Core = { 
    "Ajax" : function(url, data){ 
     $.ajax({ 
      type: "POST", 
      url: host + url, 
      data: data, 
      success: function(json){ 
       var response = $.parseJSON(json); 
       if(response.status == "200"){ 
        alert(response.html); 
        return response; 
       } 
       else{ 
        alert(response.html); 
        return false; 
       } 
      }, 
      error:function (xhr, ajaxOptions, thrownError){ 
       alert(xhr.status); 
      } 
     }); 
    } 
}; 

답변

6

.

요청이 완료되면 브라우저는 success 콜백을 호출합니다. 성공 콜백에서 반환하는 것은 단순히 사라집니다.

코드 줄에 을 반환하는 것은 불가능합니다. 요청이입니다. 성공 콜백이 발생하면 이미 해당 줄을 지나고 있습니다.

+0

포인트. Houwever 나는 asyncronously asint 옵션을 시도했지만 여전히 작동하지 않습니다. –

+3

@Sein'async : false' 실제로 synchonous하게 만들지 만, 그 방법으로는 작동하지 않습니다. -'$ .ajax()'는 항상 성공 콜백의 반환 값이 아닌'XMlHTTPRequest' 객체를 반환합니다. 성공 콜백을 XMLHTTP 객체에서 설정하고 거기에서 값을 가져올 수는 있지만 미리 정의 된 변수를 설정하는 것이 더 쉽습니다. 'var result = null; $ .ajax (....)' –

+0

@ 센 : 이제 비동기 적입니다. AJAX 호출에서 "반환"할 수 없으므로 콜백 함수를 사용해야합니다. –

2

당신은 비동기 기능에서 물건을 반환 할 수 없습니다. $.ajax()을 호출하는 함수는 호출 한 직후에 응답을 받기 전에 (거의) 항상 반환합니다. success 콜백의 응답으로 수행해야하는 작업을 수행하십시오.

추 신 : ajax 인수에 dataType: 'json'을 추가하고 json.status을 사용하십시오. 직접 파싱 할 필요가 없습니다. 게다가

는 당신이 실제로 다시 서버에서 무엇을 얻을 확인 방화범의 콘솔을 사용하여 ( alert()하지 디버거) 당신은 아마 비동기 아약스의 개념을 오해하는

0

$.ajax 호출에서 아무 것도 반환 할 수 없으며 비동기입니다. 다른 콜백 함수를 호출하고 response을 전달해야합니다.

또한 $.parseJSON(json)은 필요하지 않습니다. dataType: 'json'을 설정하면 jQuery가 JSON을 구문 분석합니다.

관련 문제