2013-03-22 1 views
0

이 함수는 모듈 패턴을 드러내는 것으로 작성했지만 콘솔의 get 메서드를 metadataModule.get();으로 호출하면 콘솔에 undefined이 표시됩니다.공개 모듈 패턴 방법 echo undefined

var metadataModule = function() { 
    var metadataurl = 'http://farskids326.com/data.json'; 

    function getMetadata() { 
     console.log("Metadata Function Called") 
     $.ajax({ 
      url: metadataurl, 
      dataType: "json", 
      success: function (data) { 
       console.log(data); 
      } 
     }); 
    } 
    return { 
     get: getMetadata, 
    }; 
}(); 

이 코드에서 나는 어디에서 실수를 했습니까?

+0

도메인 간 요청입니까? 이것들은 Ajax에서 기본적으로 작동하지 않습니다. –

+0

아니요, 도메인 간 요청이 아닙니다. –

+2

확실한 점은 : 데이터를 콘솔에 로그인했는지 여부입니다. 메소드에서 아무 값도 반환하지 않기 때문에 콘솔에서'metadataModule.get()'을 호출하면'undefined'가 기록됩니다. ''메타 데이터 기능 호출이 기록 되었습니까? 네트워크 탭을 살펴보십시오. 요청이 제대로 전송 되었습니까? 응답은 무엇입니까? –

답변

0

콘솔에서 작업 할 때 마지막 명령의 반환 값은 모든 명령 뒤에 표시됩니다. 사용중인 메소드에 명시 적 리턴 값이 없습니다. 그래서, 그 이유는 undefined입니다.

이것은 아마도 귀하의 아약스 호출에 오류가 있음을 의미합니다. 성공 또는 오류 중 하나가 발생하면 너무처럼 로그인 할 변경해보십시오 : 당신은 당신의 코드를 실행하면

$.ajax({ 
    url: metadataurl , 
    dataType: "json", 
    success: function(data){ 
    console.log('called success!'); 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
    console.log('called error!'); 
    } 
}); 

그런 다음, 당신은 정확하게 실행되고있는 콜백 볼 수 있습니다. 디버깅을 시작하기에 좋은 출발점이되기를 바랍니다.

0

getMetadata 함수는 아무것도 반환하지 않으므로 정의되지 않은 값을 반환합니다. JSON의 내용으로 응답하려면 AJAX 호출을 동기식으로 만들고 얻은 값을 반환해야합니다.

var metadataModule = function() { 
    var metadataurl = 'http://farskids326.com/data.json'; 

    function getMetadata() { 
     console.log("Metadata Function Called") 
     var content = {} 
     $.ajax({ 
      url: metadataurl, 
      async : false, 
      dataType: "json", 
      success: function (data) { 
       content = data; 
      } 
     }); 
     return content 
    } 
    return { 
     get: getMetadata, 
    }; 
}(); 
+0

그리고 동기식 "A"jax 호출을하는 것은 일반적으로 나쁜 생각입니다 ... –

+0

예. 하지만 Ajax 호출을 동기시키지 않고도 Ajax 호출의 내용을 반환 할 수는 없습니다. 브라우저는 매번 조금 멈추지 만 코드의 모든 내용을 알지 못합니다. 그리고 막연하게 뭔가 나쁜 디자인 관행/이상이 최악이라는 것을 지적합니다. 그런 일을하고 자신을 위해 왜 그런 좋은 이상이 아닌가를 보는 것이 더 낫습니다. 아마도 그의 다음 질문은 콜백에 관한 것입니다 :) – TheBrain