未传递WordPress AJAX函数参数值

时间:2017-01-21 作者:Muhammad Muazzam

我使用的是wordpress ajax,下面的代码没有传递参数值metakey: id$_POST["metakey"]. 所以var_dump($_POST) 显示array(0) { }$_REQUEST 显示array()

如果我在PHP函数中输入变量的静态值$key=<any meta key> 那就好了

jQuery(".selectbox").change(function(){
     var id = this.id;

     // do a POST ajax call
    $.ajax({
      type: "POST",
      url: \'<?php echo admin_url(\'admin-ajax.php\'); ?>\',
      data: ({
        action: "get-mata-value",        
        metakey: id
      }),
      success:  function( response ) {     
                jQuery.each(response ,function(index,value){
                    jQuery(\'#\' +id).append(\'<option value="\'+value+\'">\'+value+\'</option>\');
                });
 }
    });




});
PHP:

add_action("wp_ajax_get-mata-value", "get_mata_value");
add_action("wp_ajax_nopriv_get-mata-value", "get_mata_value");
function get_mata_value()
{   
    global $wpdb;
$key=$_POST["metakey"];
    $result=
 $wpdb->get_col( $wpdb->prepare( 
    "
    SELECT      DISTINCT meta_value
    FROM        $wpdb->postmeta 
    WHERE       meta_key = %s               
    ",
    $key
) ); 
 return($result);

    exit();

}
编辑:

在chrome developer tool下我看到了

jquery。js?ver=1.12.4:4 XHR完成加载:后

出现以下错误:

jquery。js?ver=1.12.4:2未捕获类型错误:无法使用“in”运算符在中搜索“length”

4 个回复
最合适的回答,由SO网友:Muhammad Muazzam 整理而成

问题出在google api上,如前所述,它显示了与api相关的错误消息

jquery。js?ver=1.12.4:2未捕获类型错误:无法使用“in”运算符在中搜索“length”

因此,我在主题函数中添加了以下代码片段。调用google api早期版本的php。它解决了传递参数值的问题。所有其他代码都已经很好了。

  //Making jQuery Google API

    function modify_jquery() {

        if (!is_admin()) {

            // comment out the next two lines to load the local copy of jQuery

            wp_deregister_script(\'jquery\');

            wp_register_script(\'jquery\', \'https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js\', false, \'1.8.1\');

            wp_enqueue_script(\'jquery\');
        }

    }

    add_action(\'init\', \'modify_jquery\');

SO网友:Tunji

首先,你应该阅读AJAX_in_Plugins

其次你应该看看wp_localize_script 获取javascript的管理ajax url的值。

$data = array(
    \'ajax_url\' => admin_url( \'admin-ajax.php\' )
);

wp_localize_script( \'ajax-script\', \'ajax_object\', $data );
在javascript中,您需要引用本地化数据

jQuery(".selectbox").change(function(){
    var id = this.id;

    // do a POST ajax call
    $.ajax({
        type: "POST",
        url: ajax_object.ajax_url,
        data: ({
            "action": "get-mata-value",
            "metakey": id
        }),
        success:  function( response ) {

        }
    });
});

SO网友:Aniruddha Gawade

我试过你的密码。不知道为什么,但是this.id 不会为我返回值。因此,请尝试使用jQuery(this).attr(\'id\').

如果这不能解决您的问题,请尝试console.log(id) 在ajax调用之前,检查得到的值。

SO网友:scott

您在jQuery插件中收到一个错误。我不知道为什么,但这似乎是你发展的障碍。我查看了wordpress的安装,使用了相同版本的jQuery,但没有出现错误。

我不知道是否有导致冲突的插件或主题。通常的补救方法是禁用所有插件和主题,看看问题是否消失。

您还可以尝试将较旧版本的jQuery排队(如果可能的话),看看这是否可以解决问题。

也许是wordpress的安装被破坏了。你能在其他地方重新安装WP吗?您的本地计算机可能是一个很好的候选者。

很抱歉,我不知道您为什么会出现这个错误,很明显,在您清除这个错误之前,您将无法看到AJAX是否正常工作。

EDIT: 我想知道错误是在发送数据时发生的,还是在返回数据时发生的。在里面get_mata_value(), 请尝试“echo$result;”,而不是“return($result)”。而不是“exit();”试试“wp\\u die();”。但不是$result 从数据库中,将其设置为测试值,如$result = "I get by with a little help from my friends";

我在谷歌上搜索了来自jQuery的错误消息。查看此问题的最后一个答案page. 我将更改change回调函数的第一行var id=this.id;var id=jQuery(this).id;

相关推荐

当调用Get_Current_User_id()时,跨域AJAX请求总是返回0;

我目前使用localhost,当我想测试对web服务器的ajax请求时,函数get\\u current\\u user\\u id()总是返回0。然而,当我从我的网站发出ajax请求时,它是有效的。在浏览器中打开文件还会返回当前wp\\U用户id。我向其发出请求的文件:<?php require_once $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-load.php\'; echo get_current_user_id(); 我的身体里有co