2010-07-15 7 views
1

링크의 href 속성에 정의 된 작업에 요청을 보내야하는 동적 js를 작성하고 있습니다. 그런jquery - jsonp 콜백 매개 변수를 덮어 씁니다.

링크의 모양을

 
    <a href="module/action?callback=MyCallback">show something</a> 

링크를 볼 수있는 콜백라는 이름의 get PARAM 있습니다. 이는 요청 메소드가 가능한 한 포괄적이어야하고 요소가 응답과 관련하여 무엇을 알아야하기 때문에 정의됩니다.

지금 내가 그렇게 찾고, 작업에 JQuery와 아약스 기능 요청을 보내 원칙적으로, 아주 잘 작동

 
jQuery('#mylink').live("click", function() { 
    jQuery.ajax({ 
     type: 'GET', 
     dataType:"jsonp", 
     error: ErrorHandler.catchXhrError, 
     url: jQuery('#mylink').attr('href'); 
    }); 
}); 

. 하지만 내 문제는 jquery가 param을 얻는 자신의 콜백을 정의하고 있다는 것을 알 수 있습니다.이 메서드를 어떻게 호출 할 수 있는지, href의 콜백 매개 변수가 올바른 것입니다. uri는 다음과 같이 보입니다.

때문에,

 
<a href="module/action?callback=MyCallback">show something</a> 

하지만 난이 솔루션을 좋아하지 않는다 : 내가 볼

 
    http:/example.com/module/action?callback=MyCallback&callback=jsonp1279196981233 

유일한 방법 아웃, 내 자신의 콜백 PARAM이 mycallback 이름을 정의하고 대신 콜백의 작용에 mycallback을 해석하는 것입니다 내 요청 uri에는 사용할 수없는 매개 변수가 있습니다.

 
    http:/example.com/module/action?mycallback=MyCallback&callback=jsonp1279196981233 

내가 송신 방법은 일반적인해야하기 때문에 아약스 방법

 
jQuery('#mylink').live("click", function() { 
    jQuery.ajax({ 
     type: 'GET', 
     dataType:"jsonp", 
     jsonpCallback: 'MyCallback', 
     error: ErrorHandler.catchXhrError, 
     url: jQuery('#mylink').attr('href'); 
    }); 
}); 

내부의 콜백 메소드의 이름을 정의 할 수 있고 우리의 전체면에 걸쳐 사용됩니다 참석하시기 바랍니다 및 응답이 처리 할 수있다 다른 js 메소드에 의해 많은 다른 방법으로.

희망 사항을 충분히 설명하고 도움을 드리겠습니다.

+0

'callback'은 클라이언트를위한 것이 아닙니다. 서버에는 콜백 매개 변수의 이름을 지정해야합니다. 예를 들어, YQL은''_callback ''이라는 이름의 매개 변수를 기대합니다. 서버 측에서이 매개 변수를 제어하지 않으면 url에 속성의 일부로 param 이름을 포함 시키십시오. ''. 이보다 더 일반화되지는 않습니다. 지정되어 있지 않으면 기본 키''콜백 ''으로 폴백한다. – Anurag

+0

또한 두 개의'callback' 매개 변수를 보낼 수없고 모든 서버가 똑같이 동작 할 것으로 기대할 수 없습니다. 어떤 사람들은 첫 번째 것을 집을 수도 있고, 다른 사람들은 두 번째 집을 집을 수도 있습니다. 예를 들어, YQL은 배수가있는 경우 항상 첫 번째'callback' 매개 변수를 사용합니다. 중복에 관한 것이 아니라 예기치 않은 동작에 관한 것입니다. – Anurag

답변

0

jQuery.ajax 버전을 사용해야하지만 콜백 이름은 하드 코드하지 않아야합니다. 대신

jQuery('#mylink').live("click", function() { 
    var href = jQuery('#mylink').attr('href'); 

    jQuery.ajax({ 
     type: 'GET', 
     dataType:"jsonp", 
     jsonpCallback: href.match(/([?&]callback[a-zA-Z0-9=]+)/)[0].split('=')[1], 
     error: ErrorHandler.catchXhrError, 
     url: href; 
    }); 
}); 
+0

예. 그것에 대해 생각했지만 파싱을 피할 수 있기를 바랍니다. 덕분에 – snirgel

+0

. 그것을 시도 할 것입니다 ... – snirgel

0

당신이 http://code.google.com/p/jquery-jsonp/로 봤어 .. 구문 분석이 여기 href 속성을 구문 분석하고 .. 사용하는 콜백의

을 이름을 추출?

+0

그래,하지만 그 여분의 lib를 삽입하고 싶지 않았어. 나 혼자서 문제를 해결할 수있을 거라 생각 했어. 아래 Gaby에서 솔루션을 시도하고 href에서 콜백 매개 변수를 구문 분석합니다. 잘 작동합니다 ... – snirgel

+0

다행이 당신을 발견 : –

관련 문제