2013-12-10 4 views
0

wordpress에서 다른 PHP 페이지로 ajax 요청을 보내려고합니다. 그러나 매번 다른 결과와 함께 0을 반환합니다. 0을 제거해야합니다. 나는 죽을려고 노력했다. 0을 제거합니다. 그러나 이것을 호출하면 전체 화면이 공백이됩니다. 내 코드0을 표시하지 않고 wordpress에서 ajax 요청을 보내는 방법

JQuery와,

<script type="text/javascript"> 
function key_press(){ 
    jQuery.ajax({ 
url : '<?php echo get_admin_url()?>admin-ajax.php', 
type : 'POST', 
data : jQuery('[name="ans_name"]').serialize() 
}).done(function(result) { 
// ta da 
//alert("success"); 
jQuery("#widget_poll_id").html(result); 

}); 
} 

</script> 

PHP, 다음과 같습니다

add_action('wp_ajax_nopriv_'.$_POST['ans_name'], 'my_ajax'); 
    add_action('wp_ajax_'.$_POST['ans_name'], 'my_ajax'); 


    function my_ajax() { 

    echo $_POST['ans_name']; 

    die(); 

} 
내가이 상황에서 제거 할 수있는 방법을

?

+0

에코를 제거하고 return으로 바꾸시겠습니까? die die() – Marty

답변

3

귀하의 조치가 호출되지 않았기 때문입니다.

WP가 호출 할 작업을 알 수 있도록 아래에 속성 action을 선언해야합니다.

특정 경우에 (data과 반대)을 선언해야 $_POST['ans_name']이 존재해야합니다. $_POST['ans_name']을 후크 이름으로 사용했기 때문에이 AJAX 요청이 여러 차례 호출되기를 바란다고 생각합니다. 그런 경우가 아니라면 정적이 아닌 뭔가를 사용하는 것이 좋습니다. 다른 요청을하는 동안 훅을 호출 할 수 있기 때문에 필요하지 않습니다.

마지막으로, AJAX 요청 중에 필요할 수있는 WP의 장점을 모두 포함하도록 WP AJAX 처리기를 코드에 추가했습니다.

<script type="text/javascript"> 
    function key_press(){ 

     var data = { 
      url:  '<?php echo get_admin_url()?>admin-ajax.php', 
      type:  'POST', 
      action:  jQuery('[name="ans_name"]').serialize(), 
      ans_name: jQuery('[name="ans_name"]').serialize() 
     }; 

     var myRequest = jQuery.post(ajax_object.ajaxurl, data, function(response){ 
      alert('Got this from the server: ' + response); 
     }); 

     myRequest.done(function(){ 
      alert("success"); 
     }); 

    } 
</script> 

add_action('wp_ajax_nopriv_'.$_POST['ans_name'], 'my_ajax'); 
add_action('wp_ajax_'.$_POST['ans_name'], 'my_ajax'); 
function my_ajax(){ 

    echo $_POST['ans_name']; 

    die(); // Required for a proper Wordpress AJAX result 

} 

추가가 제대로 handeled 않은 비 로그인 한 사용자에합니다 (nopriv 후크)에 대한 AJAX 요청을 확인하여 functions.php 파일이 추가합니다.

<?php 
add_action('wp_head', 'plugin_set_ajax_url'); 
function plugin_set_ajax_url() { 
?> 
    <script type="text/javascript"> 
     var ajax_object = {}; 
     ajax_object.ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
    </script> 
<?php 
} 
?> 
+0

고마워요. 그러나 나는 거의 도움이 필요하지 않습니다. 제출 버튼을 클릭하면 "ans_name = 31"이 반환됩니다. 하지만 "ans_name"은 필요 없어요. "31"만 있으면됩니다. 나는 너무 어렵지 않다는 것을 안다. 그러나 나는 그것을 알 수 없었다. –

+0

AJAX 요청을하기 전에'ans_name' (그리고 프록시'action') 값을 얻는 방법 때문일 수 있습니다. 나는 ans_name이있는 필드 유형에 대해 가정하고 있지만,'jQuery ('[name = "ans_name"]'). serialize()'와'jQuery ('[name = " ans_name "] ') .val()'. –

관련 문제