Heim > Artikel > Backend-Entwicklung > Warum gibt mein WordPress-AJAX-Aufruf „0“ zurück, obwohl die PHP-Funktion eine Echo-Anweisung enthält?
Problem
Ein AJAX-Aufruf liefert durchweg „0“ als Ausgabe und verlässt Der Entwickler war verwirrt. Die Datei „functions.php“ enthält folgenden Code:
<code class="php">function get_data() { $abc = '1'; $result = $wpdb->get_results("SELECT * FROM " . $wpdb->options . " WHERE option_name LIKE '_transient_%'"); echo $result; // Outputting this value but still displays 0 wp_die(); } add_action('wp_ajax_nopriv_get_data', 'get_data'); add_action('wp_ajax_get_data', 'get_data');</code>
Mittlerweile erfolgt der AJAX-Aufruf über JavaScript:
<code class="javascript">$('body').on("click", ".re-reset-btn", function(e) { var panel = $('#re-compare-bar'); $.ajax({ type : "GET", dataType : "json", url : "/wp-admin/admin-ajax.php", data : {action: "get_data"}, success: function(response) { alert("Your vote could not be added"); alert(response); } }); $("#re-compare-bar-tabs div").remove(); $('.re-compare-icon-toggle .re-compare-notice').text(0); });</code>
Trotz des Versuchs, die Variable $abc auszugeben, das Ergebnis bleibt '0'.
Lösung
In WordPress wird die globale Variable ajaxurl standardmäßig für AJAX-Aufrufe bereitgestellt. Allerdings ist diese Variable im Frontend nicht definiert. Um AJAX-Aufrufe im Frontend zu nutzen, müssen Sie Ajaxurl manuell definieren.
Ein empfohlener Ansatz ist die Verwendung von wp_localize_script. Bedenken Sie, dass sich Ihre AJAX-Aufrufe in „my-ajax-script.js“ befinden. Fügen Sie wp_localize_script wie folgt hinzu:
<code class="php">function my_enqueue() { wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') ); wp_localize_script( 'ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); } add_action( 'wp_enqueue_scripts', 'my_enqueue' );</code>
Sobald Ihre JS-Datei lokalisiert ist, können Sie auf das my_ajax_object-Objekt in Ihrer JS-Datei zugreifen und Änderungen vornehmen Ihr AJAX-Aufruf entsprechend:
<code class="javascript">jQuery.ajax({ type: "post", dataType: "json", url: my_ajax_object.ajax_url, data: formData, success: function(msg){ console.log(msg); } });</code>
Das obige ist der detaillierte Inhalt vonWarum gibt mein WordPress-AJAX-Aufruf „0“ zurück, obwohl die PHP-Funktion eine Echo-Anweisung enthält?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!