web-dev-qa-db-ja.com

JQuery UIダイアログ付きのAjaxが機能しない

ダイアログボックスで変更が行われたときに、カスタムデータベーステーブルを更新しようとしています。ダイアログボックスと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の部分を除いてすべてうまくいきます。上記のコードは、私が自分のphpファイルにエンキューさえしている個別のjavascriptファイルです。以下は、Ajax呼び出し中に渡されたIDを持つデータベースを更新するためのAjax呼び出し関連コードです。

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スクリプトに以下を追加し、コンソールに "Success"と表示します。

success: function(){
console.log("Success");
}

私のテーブル名はwp_feedmanagerで、私はそれを 'message'カラムに更新しようとしています。しかし、それはただ更新しないのですか?何をすべきですか何か提案?

今後の参考のために -

問題はここにありました - 更新クエリの3番目のパラメータはarray( 'id' => $ feedid)であるべきです含まれるように!

2
Navin Nagpal

Javascriptとajaxのアクションコードがそれ以外の点で正しいと仮定して、エンキューされたスクリプトを ローカライズする ことによって正しいパスでadmin-ajax.phpをターゲットにします。

wp_localize_script(
    'your_script_handle',
    'script_data',
    array( 'admin_ajax' => admin_url( 'admin-ajax.php' ) )
);

次に、JavaScriptで、そのURLを参照します。

url: script_data.admin_ajax

編集 -

ああ、初めてこれを逃した:$wpdb->feedmanagerは明示的にどこかに設定しない限り設定されない。 $wpdb->table_nameはネイティブテーブルに対してのみ機能します。それらのメンバーvarはwpdbクラスに直接ハードコードされているからです。それを文字列'wp_feedmanager'に変更してください。

また、wp_テーブルの接頭辞はwp-config.phpを介して変更することができます(そして変更すべきです)。コードの移植性を高めるために$wpdb->prefixを使用してください。

$table_name = $wpdb->prefix . 'feedmanager';
1
Milo