2014-04-10 26 views
2

Magnificent Popup을 열 때 data 개체를 AJAX 요청으로 보내려고합니다. 그러나 $(this)이 플러그인 내에서 올바르게 번역되지 않는 것 같습니다. 데이터 오브젝트가 제대로 반환되지 않습니다

<div class="my-div"> 
    <a href="/path/to/file.php" data-name="John" data-location="Boston">Click here</a> 
</div> 

$('.my-div a').magnificPopup({ 
    type: 'ajax', 
    ajax: { 
    settings: { 
     data: $(this).data() 
    } 
    } 
}); 

:

이 코드를 생각해 보자. 나는이와 데이터 라인을 교체하는 경우에는 :
data: { name: "John", location: "Boston" } 

는 다음 나는 $_GET에 그 객체를 참조 할 수 있어요.


편집 : 아직 아무 것도 반환하지 않습니다

data: { href: $(this).attr('href') } 

:$(this)magnificPopup 내에서 제대로 작동하지 않는 사실을 촉진하기 위해, 나는에 데이터 라인을 변경했습니다. 내가했던


모든 플러그인 내에서 존중되지 $(this) 가리 것으로 보인다. 어떻게 원래 앵커 태그에서 data 개체를 가져와 AJAX 요청에 전달할 수 있습니까?

+0

난 당신이 .DATA() 메서드의 키를 언급해야 할 것 같아요. http://api.jquery.com/data/ – Pazza22

+1

아니요, 간단한'.data()'는 모든 'data- *'값을 JavaScript 객체로 반환합니다. 예 : http://jsfiddle.net/7nvgL/ –

+0

필수 매개 변수 이름없이 개체를 전달하기 때문입니다. 데이터를보십시오 : {myObj : $ (this) .data()}. 이것은 myObj라는 이름을 가진 객체를 전달할 수 있습니다 – Pazza22

답변

1
$('.my-div a').magnificPopup({ 
     type: 'ajax', 
     elementParse: function(item) { 
      this.st.ajax.settings = item.el.data(); 
     } 
}); 
+0

그런 다음 팝업에서이 값에 어떻게 액세스합니까? – froadie

1

직접 호출하는 대신 단순히 클릭에 아약스 요청을 호출이

data: { name:$(this).data('name'), location:$(this).data('location') } 
+0

틀린데,'$ (this) .data()'는 모든'data- *'엘리먼트를 포착하여 JavaScript 객체로 리턴한다. 어쨌든 당신의 대답은 효과가 없습니다. –

+0

@MichaelIrigoyen ok updated –

+0

당신의 대답은 여전히 ​​문제를 해결하지 못합니다. '$ (this)'는'magnificPopup' 호출에서 빠져있는 것처럼 보입니다. 'data' 속성의 값을 얻기위한 다른 방법을 찾고 있습니다. –

1

내가 데이터로 아약스 응답을 호출하는 가장 좋은 방법은 요청에 속성 것으로 나타났습니다한다 시도 할 수 있습니다 magnificpopup. 그런 다음 표준 인라인 mfp에 응답을 삽입하기 만하면됩니다.

$('a.popup').magnificPopup({ 
    type: 'ajax', 
    ajax: { 
     settings: { 
      type: "POST", 
      url: '/ajax.php', 
      data: { 
       action : 'ajax_action', 
       postid : this.currItem.el.data('id') 
       // this doesn't actually work because 'this.currItem' 
       // is only accessible in a callback 
      } 
     } 
    } 
}); 

대신이 작업을 수행 :

$('a.popup').click(function(){ 
    $.ajax({ 
     type: "POST", 
     url: '/ajax.php', 
     data: { 
      action : 'ajax_action', 
      postid : $(this).data('id'), 
      //$(this).data() works because it's a standard AJAX call 
     }, 
     success: function(data){ 
      $.magnificPopup.open({ 
       type: 'inline', 
       items: { 
        src: data 
       } 
      }) 
     } 
    }); 
}); 
+0

최상의 솔루션 ... –