2012-11-13 4 views
2

JavaScript의 초보자입니다. 초기화 할 때 Flickr Web API와 Ajax를 통해 통신하는 클래스를 만들고 싶습니다.json을 아약스로 가져 와서 클래스 초기화가 항상 실패합니다.

Photo2.js

var Photo2; 

    Photo2 = (function() { 

    Photo2.prototype.json = null; 

    function Photo2() { 
     $.getJSON('http://www.flickr.com/services/rest/?jsoncallback=?', { 
     format: 'json', 
     method: 'flickr.photos.search', 
     api_key: '7965a8bc5a2a88908e8321f3f56c80ea', 
     user_id: '[email protected]', 
     per_page: '100' 
     }, function(data) { 
     this.json = data.photos.photo; 
     }); 
    } 

    return Photo2; 

    })(); 

그러나 photo2 = new Photo2로 초기화 할 때이 photo2.json이 없습니다.

감사합니다.

+0

내가 위를 사용하지 않는,하지만 일반적으로 요청을 의미 JSON 콜백과'형식입니다 패딩과 JSON이다 ' jsonp는 믿습니다. – Ohgodwhy

+0

조언 해 주셔서 감사합니다. 나는'json'과'jsonp'을 시도했지만 실패했습니다. – weed

+0

최신 버전의 jQuery는 $ .getJSON을 사용하여 JSONP를 가져 오는 데 문제가있는 것 같습니다. 대신 $ .ajax를 사용해 보셨습니까? – m90

답변

2

정말로 코드를 다시 작성해야합니다. 당신이 성취하고자하는 것을 이해하는 것은 복잡하고 어렵습니다.

우선 서버에서 데이터를 가져 오는 것이 비동기 적이므로 Photo2 json 속성의 인스턴스를 만든 후에는 속성이 정의된다는 것을 확신 할 수 없습니다.

다음은 개체를 초기화하는 동안 서버 호출을하는 것이 좋습니다. 여기

(function() { 
    var Photo2 = function(callback) { 
    this.json = null; 
    }; 

    Photo2.prototype.getData = function(successCallback) { 
    var self = this; 

    $.getJSON('http://www.flickr.com/services/rest/?jsoncallback=?', { 
     format: 'json', 
     method: 'flickr.photos.search', 
     api_key: '7965a8bc5a2a88908e8321f3f56c80ea', 
     user_id: '[email protected]', 
     per_page: '100' 
     }, function(data) { 
     self.json = data.photos.photo; 
     typeof successCallback == 'function' && successCallback(); 
     }); 
    }; 

    var photo = new Photo2(); 
    photo.getData(function successCallback() { 
    console.log('Data loaded', photo.json); 
    }); 
}).call(this); 

근무 데모 : 나는 당신에게 다음과 같은 솔루션 조언을 http://jsbin.com/ureyas/1/edit

+0

위의 코드를 이해하려고 노력 중입니다 ... 그런데 JSBin 도구는 매력적입니다! – weed

+0

@weed : 내 것이 아니야 :)하지만 JS 코드를 공유하는 동안이 코드를 사용하는 것이 좋습니다. 추가 질문이 있으시면 언제든지 여기로 질문하십시오. – dreame4

관련 문제