web-dev-qa-db-fra.com

Ajax avec la boîte de dialogue de l'interface utilisateur jQuery ne fonctionne pas

J'essaie de mettre à jour ma table de base de données personnalisée lorsque des modifications sont apportées dans une boîte de dialogue. Le script pour la boîte de dialogue et l'appel ajax est le suivant -

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

Le script ci-dessus fonctionne bien, mais pour la partie Ajax. Le code ci-dessus est un fichier javascript séparé que j'ai même mis en file d'attente dans mon fichier php. Ce qui suit est le code associé à l'appel Ajax pour mettre à jour la base de données dont l'id est transmis lors de l'appel 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' ) ) );
}

EDITAjout de ce qui suit au script, la console affiche "Success"

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

Mon nom de table est wp_feedmanager et j'essaie de mettre à jour sa colonne 'message'. Mais il ne veut tout simplement pas mettre à jour? Des suggestions ce qui devrait être fait?

Pour référence future -

Le problème était ici - Le troisième paramètre de la requête de mise à jour devrait être array ('id' => $ feedid) De plus, l'EDIT concernant le nom de la table suggéré par Milo doit être inclus!

2
Navin Nagpal

En supposant que vos codes d’action javascript et ajax soient corrects, ciblez admin-ajax.php avec le chemin correct en localizing votre script mis en file d’attente:

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

Ensuite, dans votre javascript, référencez cette URL avec:

url: script_data.admin_ajax

EDIT -

ah, j'ai manqué ceci la première fois: $wpdb->feedmanager n'est pas défini, sauf si vous l'avez explicitement défini quelque part. $wpdb->table_name ne fonctionne que pour les tables natives, car ces vars membres sont directement codés en dur dans la classe wpdb. changez-le en une chaîne 'wp_feedmanager'.

notez également que le préfixe de la table wp_ peut être modifié (et devrait être) via wp-config.php, utilisez $wpdb->prefix pour rendre votre code plus portable:

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