wake-up-neo.com

Ajax mit jQuery UI-Dialogfeld funktioniert nicht

Ich versuche, meine benutzerdefinierte Datenbanktabelle zu aktualisieren, wenn Änderungen in einem Dialogfeld vorgenommen werden. Das Skript für das Dialogfeld und den Ajax-Aufruf lautet wie folgt:

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");
  });
});

Das obige Skript funktioniert gut, außer für den Ajax-Teil. Der obige Code ist eine separate Javascript-Datei, die ich sogar in meine PHP-Datei einreihe. Das Folgende ist der auf Ajax-Aufrufe bezogene Code zum Aktualisieren der Datenbank, bei dem die ID während des Ajax-Aufrufs übergeben wurde:

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' ) ) );
}

EDITFolgendes wurde zum Skript hinzugefügt, Konsole zeigt "Erfolg"

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

Mein Tabellenname ist wp_feedmanager und ich versuche, die Spalte 'message' zu aktualisieren. Aber es wird nicht aktualisiert? Irgendwelche Vorschläge, was getan werden sollte?

Für zukünftige Referenz -

Das Problem war hier - Der dritte Parameter der Update-Abfrage sollte sein Array ('id' => $ feedid) Auch die von Milo vorgeschlagene Änderung des Tabellennamens muss enthalten sein!

2
Navin Nagpal

Unter der Annahme, dass Ihr Javascript- und Ajax-Aktionscode ansonsten korrekt sind, richten Sie den admin-ajax.php mit dem richtigen Pfad durch Lokalisieren Ihr in die Warteschlange gestelltes Skript aus:

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

Verweisen Sie dann in Ihrem Javascript auf diese URL mit:

url: script_data.admin_ajax

EDIT -

ah, das habe ich das erste mal verpasst: $wpdb->feedmanager wird nur gesetzt, wenn du ihn explizit irgendwo gesetzt hast. $wpdb->table_name funktioniert nur für native Tabellen, da diese Member-Vars direkt in der wpdb-Klasse fest codiert sind. ändere es in einen String 'wp_feedmanager'.

beachten Sie auch, dass das wp_-Tabellenpräfix über wp-config.php geändert werden kann (und sollte). Verwenden Sie $wpdb->prefix, um Ihren Code portabler zu machen:

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