Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery WordPress AJAX调用拒绝返回数据_Jquery_Ajax_Wordpress - Fatal编程技术网

Jquery WordPress AJAX调用拒绝返回数据

Jquery WordPress AJAX调用拒绝返回数据,jquery,ajax,wordpress,Jquery,Ajax,Wordpress,我试图在选择字段更改后返回一些元数据。然而,我已经对下面的代码进行了多次迭代,如果我只是从php脚本中回显代码,它就可以正常工作,但是当我尝试将其作为响应返回时,它失败了。我知道它肯定在运行这个函数,因为如果我简单地告诉它‘echo’xxxx,它就会工作。下面是我试图实现的代码。我完全被难住了,希望我只是忽略了一些事情 add_action('admin_footer', 'get_criteria_javascript'); function get_criteria_javascript(

我试图在选择字段更改后返回一些元数据。然而,我已经对下面的代码进行了多次迭代,如果我只是从php脚本中回显代码,它就可以正常工作,但是当我尝试将其作为响应返回时,它失败了。我知道它肯定在运行这个函数,因为如果我简单地告诉它‘echo’xxxx,它就会工作。下面是我试图实现的代码。我完全被难住了,希望我只是忽略了一些事情

add_action('admin_footer', 'get_criteria_javascript');

function get_criteria_javascript() {
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
    if(jQuery('select#pages').length > 0) {
        jQuery('select#pages').live('change', function() {
            var selected = jQuery(this).val();
            var data = { action: 'get_criteria', post_id: selected };

            jQuery.ajax({
                type: 'post',
                dataType: 'html',
                url: 'admin-ajax.php',
                data: {action: 'get_criteria', post_id : selected },
                success: function(response) {
                    alert(response);
                }
            });
        });
    }
});
</script>
<?php
}

add_action('wp_ajax_get_criteria', 'get_criteria_callback');

// if I use echo get_criteria_callback(627); here, it returns the expected results... 

function get_criteria_callback($post_id) {
    $meta = get_post_meta($post_id, 'criteria');
    $content = implode(', ', $meta[0]); 
/* This is one version. Although I can echo it fine, if I return this as a response, it tells me my implode is using invalid arguments */

    echo $content;
    die();
 }

在ajax调用中,url参数不应硬编码,而应使用ajaxurl。ajax调用是一个新的http请求。因此,您发送的数据通过POST方法传递

function get_get_criteria_callback(){
  $post_id = isset( $_POST['post_id'] ) ? $_POST['post_id'] : false;

  if( $post_id ){
    $meta = get_post_meta($post_id, 'criteria');
    $content = implode( ', ', $meta[0] );
  }

  echo $content;

  die();

}

希望有帮助

非常确定jquery不会在ajax请求后再次触发document.ready。它只在页面加载时触发。谢谢,我在上一次迭代中尝试忽略了它,但结果是一样的。如果我回显,则有效,但不作为响应。请检查,谢谢您的响应。我本来有一个ajaxurl在那里,但没有什么不同。我一直在想我遗漏了一些明显的东西,但我想不出来…谢谢。第一次我不明白你的意思,但是是的,使用$\u POST确实有效!再次感谢你@詹尼弗利彻,不客气。如果我的英语更好,我会立即解决这个问题: