2016-09-01 2 views
1

Ich fange mit wordpress und hatte bis jetzt nicht viel Problem mit ihm.Kann nicht Ajax arbeiten in WordPress

Ich möchte in meine database unter Verwendung ajax, wenn ein Benutzer den Wert einer SELECT aming, um Formulareingabe zu aktualisieren ändern. Einfach mit ajax und php mit php und jquery, aber ich kann nicht scheinen, das Konzept dahinter in WordPress zu begreifen.

Alle php, die veröffentlicht werden, ist direkt in der Datei, wo ich mein Formular in meinem Plugin habe. Zum Testen versuche ich momentan nur etwas von der js in der Navigator Konsole zu haben.

Die PHP (Wordpress):

add_action("wp_enqueue_fetch_guide", "fetch_guide"); 
function fetch_guide(){ 
wp_enqueue_script('guide', plugins_url('/js/jquery.guide.js', __FILE__)); 

    wp_localize_script('guide', 'fetchGuide', admin_url('admin-ajax.php')); 
} 

add_action("wp_ajax_nopriv_fetch_guide_return","fetch_guide_return"); 
add_action("wp_ajax_fetch_guide_return","fetch_guide_return"); 

function fetch_guide_return(){ 
    global $wpdb; 
    if(isset($_POST["id"])){ 
     $id = $_POST["id"]; 
     $table = $wpdb->prefix."guide"; 

     $guide = $wpdb->get_row("SELECT * FROM ".$table." WHERE id_guide LIKE ".$id.";"); 

     print json_encode($guide); 
    } 
} 

Die js:

$(function(){ 
    jQuery("#chooseGuide").on("change", function(){ 
     jQuery.ajax({ 
      url : fetchGuide.ajax_url, 
      type : "post", 
      data : {"id":guide.value}, 
      dataType: "json" 
     }).success(function(data){ 
      if(data != 0){ 
       console.log(data); 
      } 
     }); 
    }); 
}); 
+0

Ist die Funktion für das Ereignis ändern sein Lauf? Wird ein AJAX-Anruf getätigt und es gibt nur kein Protokoll? Versuchen Sie es mit einer Fehlerfunktion und sehen Sie, ob diese protokolliert wird. – Fencer04

Antwort

0

Das Problem hier ist, dass Sie die Ajax_url nicht richtig auf Ihre js zeigen.

aktualisieren diese Linie

wp_localize_script('guide', 'fetchGuide', admin_url('admin-ajax.php')); 

zu

wp_localize_script('guide', 'fetchGuide', array('ajax_url' => admin_url('admin-ajax.php'))); 

sollten diese wird zeigen die ajax_url richtig und Ihre Funktion gut funktionieren

0

Wordpress ändert die .htaccess alle Anforderungen an sich zu ziehen. Wenn Sie Ajax ausführen, müssen Sie entweder ein Redirection-Plugin einfügen oder das PHP-Programm von außerhalb der Wordpress-Domain angreifen.

+0

Also sehr sehr falsch. –

0

Ist Ihre JS-Datei geladen? Es scheint mir, dass die ajax_url in Ihrem wp_localize_script nicht vollständig ist. Geben Sie die Aktion, die von admin-ajax.php aufgerufen werden soll, richtig an? Der Wert fetchGuide.ajax_url sollte etwa admin-ajax.php?action=fetch_guide_return sein. Ist das korrekt ?

Haben Sie etwas in der Konsole? Es tut mir leid, aber ich kann noch nicht kommentieren, nicht genug Punkte: p

0

Danke allen für eure Antworten. Ich hatte Schwierigkeiten mit dem Verständnis, wie es in WordPress funktioniert.

Wenn eine Antwort gefunden wurde, musste ich das meiste ändern, wie ich Dinge gemacht habe.

Dies ist, was ich am Ende für die JS haben:

add_action('admin_footer', 'my_fetch_guide'); 
function my_fetch_guide() { ?> 
    <script type="text/javascript" > 
     var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>"; 
     jQuery("#chooseGuide").on("change", function(){ 
      jQuery.ajax({ 
        type:"POST", 
        url: ajaxurl, 
        data: { 
         action: "fetch_guide_return", 
         id: jQuery(this).val() 
        }, 
        dataType: "json" 
      }).success(function(data){ 
       jQuery("#wpgc_guide_form").prepend("<input type='hidden' name='idnumber' id='idnumber' value='"+data["id_guide"]+"'/>"); 
       jQuery("#name").val(data["name"]); 
       jQuery("#firstName").val(data["first_name"]); 
       jQuery("#mail").val(data["mail"]); 
       jQuery("#phone").val(data["phone_number"]); 
      }).error(function(errorThrown){ 
       alert(errorThrown); 
      }); 
     }) 
    </script> 
<?php } 

und die PHP:

add_action("wp_ajax_nopriv_fetch_tour_return","fetch_tour_return"); 
add_action("wp_ajax_fetch_tour_return","fetch_tour_return"); 

function fetch_tour_return(){ 
    global $wpdb; 
    if(isset($_POST["id"])){ 
     $id = $_POST["id"]; 
     $table = $wpdb->prefix."tour"; 

     $tour = $wpdb->get_row("SELECT * FROM ".$table." WHERE id_tour LIKE ".$id.";"); 

     print json_encode($tour); 

     die(); 
    } 
}