带有jQuery UI对话框的AJAX不起作用

时间:2013-11-10 作者:Navin Nagpal

在对话框中进行更改时,我正在尝试更新自定义数据库表。对话框和ajax调用的脚本如下所示-

jQuery(document).ready(function($){

$("td > span").click(function(){

    var id = $(this).attr(\'id\');
    var message = "message"+id;
    var content = jQuery("#"+message).text();
    var $dialog = $("<div></div>").html("<textarea style=\'width:99%; height:90%\' class=\'popup-content\'>"+content+"</textarea>").dialog({
        height: 400,
        width: 400,
        title: \'My Data\',
        modal: true,
        autoOpen: false,
        dialogClass: \'wp-dialog\',
        buttons: {
            "Save": function(){
                $("#"+message).html($(".popup-content").val());
                $.ajax({
                    type: "post",
                    url: script_data.admin_ajax,
                    data: {
                        action: "feedmng_update",
                        feed_id: id
                    }
                });
            }
        }
    });
    $dialog.dialog("open");
  });
});
除Ajax部分外,上述脚本运行良好。上面的代码是一个单独的javascript文件,我甚至将其放入php文件中。以下是与Ajax调用相关的代码,用于更新在Ajax调用期间传递id的数据库-

function __construct(){    
  add_action( \'wp_ajax_feedmng_update\', array( &$this, \'feedmng_update\' ) );
  add_action( \'init\', array( &$this, \'feedmng_load_scripts\' ) );
}

function feedmng_update(){

    global $wpdb;
    $feedid = $_REQUEST["feed_id"];
    $wpdb->update( $wpdb->feedmanager, array( \'message\' => "New data" ), array( \'id\',$feedid ) );
}

function feedmng_load_scripts(){

    wp_enqueue_script( \'jquery\' );
    wp_enqueue_script( \'jquery-ui-core\' );
    wp_enqueue_script( \'jquery-ui-dialog\' );
    wp_enqueue_style (  \'wp-jquery-ui-dialog\' );
    wp_register_script( \'feedmng-popup\', WP_PLUGIN_URL.\'/feed-manager/mypopup.js\', array( \'jquery\', \'jquery-ui-core\', \'jquery-ui-dialog\' ) );
    wp_enqueue_script( \'feedmng-popup\' );
    wp_localize_script( \'feedmng-popup\', \'script_data\', array( \'admin_ajax\' => admin_url( \'admin-ajax.php\' ) ) );
}
EDIT在脚本中添加了以下内容,console显示“Success”

success: function(){
console.log("Success");
}
我的表名是wp\\u feedmanager,我正在尝试更新它的“message”列。但它只是不更新?有什么建议该怎么做?

For future reference -

问题就在这里-更新查询的第三个参数应该是array( \'id\' => $feedid )此外,还需要包括Milo建议的关于tablename的编辑!

1 个回复
最合适的回答,由SO网友:Milo 整理而成

假设您的javascript和ajax操作代码在其他方面是正确的,那么admin-ajax.php 使用正确的路径localizing 您的排队脚本:

wp_localize_script(
    \'your_script_handle\',
    \'script_data\',
    array( \'admin_ajax\' => admin_url( \'admin-ajax.php\' ) )
);
然后在javascript中,使用以下内容引用该URL:

url: script_data.admin_ajax

EDIT-

啊,第一次错过了这个:$wpdb->feedmanager 除非已在某个位置显式设置,否则不会设置。$wpdb->table_name 仅适用于本机表,因为这些成员变量直接硬编码到wpdb类中。将其更改为字符串\'wp_feedmanager\'.

还请注意wp_ 表前缀可以(并且应该)通过以下方式更改wp-config.php, 使用$wpdb->prefix 要使代码更具可移植性,请执行以下操作:

$table_name = $wpdb->prefix . \'feedmanager\';

结束

相关推荐

在WordPress AJAX API中使用主干

我试图使用主干构建一个简单的TODO插件,但遇到了AJAX API的问题。为了获得正确的AJAX回调,必须像下面这样传入“action”参数:管理ajax。php?操作=获取\\u待办事项对于主干中的GET方法来说,它工作得很好。但是,使用DELETE主干时,默认情况下将使用如下URL:管理ajax。php?操作=获取待办事项/9其中,“9”是要删除的todo的ID。通过添加这个ID,它中断了WordPress端的AJAX调用。我可以手动覆盖每个方法的URL,但我想知道是否有更优雅的方法让AJAX API