2010-08-03 4 views
4

아약스 제공자가 콜백을 미리 정의 할 때 JSONP 아약스 요청의 콜백 핸들러에 자바 스크립트 객체 컨텍스트를 전달하는 문제가 발생합니다. Flickr는 서비스 제공 업체입니다.개체 컨텍스트를 jQuery.ajax에 전달하는 방법 JSONP 콜백?

는 위의 예제는 완벽하게 작동
 
function Person(anId) { 
this.name; 
this.id = anId; 
var self = this; 
this.loadName = function() { 
    $.ajax({ 
    url: "jsonp.json", 
    dataType: "jsonp", 
    jsonpCallback : "handleJSON", 
    data : {id: this.id}, 
    context: self, 
    success: function (data) { 
    self.name = data.name; 
    } 
    }); 
} 
} 

var handleJSON = function(data) { 
console.log("received " + data.name); 
} 

var a = new Person(234); 
a.loadName(); 
var b = new Person(345); 
b.loadName(); 



은 콘솔이 handleJSON 함수의 라인을 출력합니다

나는 간단한 예제를 제공합니다. 그러나이 함수에서 나는 그것을 호출하는 원래 객체에 대한 참조를 가지고 있지 않습니다. 나는 성공 함수가 대신 불려지 길 바란다 : 여기서 자기 변수를 참조 할 수있다.

몇 가지 가능한 솔루션이 있지만 실행되지 않습니다.

  1. jQuery가 생성 한 콜백 이름을 가로 채서 jsonpCallback 매개 변수의 값으로 사용합니다. 이 함수는 지정된 성공 함수에 위임한다고 가정합니다. 여기에서이 함수에 액세스 할 수 있습니다. 그러나 그 생성 된 이름을 얻는 방법을 알지 못합니다.
  2. 예에서 설명한 것처럼 컨텍스트 개체를 지정합니다. jQuery docs는이 객체가 콜백 핸들러에서 사용할 수 있다고 말합니다. 그러나 나는이 컨텍스트가 어떻게 노출되는지를 알 수 없다. 내 예제에서 handleJSON 기능.

현재 Google 코드에서 jquery-jsonp로 해결책을 찾았습니다. 그러나 여전히 2.에서 설명한 문제를 해결하는 방법에 대해 매우 궁금합니다. jQuery 참조가 그렇게 처리 될 수 있다고 생각하기 때문입니다. 왜 제 3 자 라이브러리가 적게 든 신뢰할 수 있습니다.

누군가 jQuery를 사용하여 JSONP 콜백 핸들러에서 컨텍스트에 액세스하는 방법을 보여 줄 수 있습니까?

답변

11

그냥 jsonpCallback 속성을 그대로두고 jQuery가 호출 된 함수와 함수 이름을 작성하게하십시오. 이 함수는 지정한 컨텍스트에서 지정한 성공 콜백을 호출합니다.

function Person(anId) { 
this.name; 
this.id = anId; 
this.loadName = function() { 
    $.ajax({ 
    url: "jsonp.json", 
    dataType: "jsonp", 
    data : {id: this.id}, 
    context: this, 
    success: function (data) { 
    this.name = data.name; 
    } 
    }); 
} 
} 

var a = new Person(234); 
a.loadName(); 
var b = new Person(345); 
b.loadName(); 
+0

빠른 답장을 보내 주셔서 감사합니다. 귀하의 답변은 사소한 것처럼 보이지만 내 서비스 제공 업체는 자체 콜백 인 jsonFlickrApi ({json})에서 JSON을 래핑합니다. 생성 된 콜백 jQuery 이름은 무시됩니다. 'jsoncallback = handleJSON'매개 변수를 제공하면 콜백 이름에 영향을 미칠 수 있지만 전역 범위 함수 이름 만 전달할 수 있고 개체 범위 함수 이름을 전달해야하기 때문에 옵션이 없습니다. – TheHobbyist

+1

@ TheHobbieist :이 경우'jsonPCallback' 속성을 사용하여''jsonFlickrApi''를 함수 이름으로 지정하지만 함수를 만들지는 마십시오. 'ajax' 메소드는 당신을 위해 함수를 생성 할 것입니다. – Guffa

+0

당신은 남자입니다. 매우 감사합니다. – TheHobbyist

관련 문제