De ce nu funcționează apelul meu AJAX?
5 sept. 2013, 12:16:49
Vizualizări: 24.1K
Voturi: 1
Am cod similar care funcționează în fișierul functions.php al unei teme, dar vreau să-l mut într-un plugin. Am asamblat următorul cod dar din anumite motive, această metodă are probleme la apelul AJAX și returnează întotdeauna zero.
Intenția este ca formularul să fie în frontend și să poată fi folosit atât de utilizatorii autentificați cât și de cei neautentificați.
Iată codul plugin-ului meu:
/*
Plugin Name: AAA Hello World
Plugin URI: http://helloworld.com
Description: Răspuns AJAX la trimiterea formularului
Version: 1.0
Author: John Doe
Author URI: http://helloworld.com
*/
class RespondToMyClicks {
function __construct() {
add_action( 'wp_enqueue_scripts', array( &$this, 'click_response_styles' ) );
add_action( 'wp_enqueue_scripts', array( &$this, 'click_response_scripts' ) );
if( is_admin() ) {
add_action( 'wp_ajax_the_ajax_hook', array( &$this, 'process_clicky_form' ) );
add_action( 'wp_ajax_nopriv_the_ajax_hook', array( &$this, 'process_clicky_form' ) );
}
add_shortcode( 'click_response_form', array( &$this, 'click_response_form' ) );
}
public function click_response_styles() {
wp_register_style( 'respond-to-my-clicks', plugins_url( dirname( plugin_basename( __FILE__ ) ) . '/styles.css' ) );
wp_enqueue_style( 'respond-to-my-clicks' );
}
public function click_response_scripts() {
wp_enqueue_script( 'respond-to-my-clicks', plugin_dir_url( __FILE__ ) . 'ajax.js', array( 'jquery' ) );
wp_localize_script( 'respond-to-my-clicks', 'the_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
public function process_clicky_form() {
if( !empty( $_POST ) && wp_verify_nonce( $_POST['post_filtration'], 'post_filter_action' ) ) {
echo "Salut Lume";
die();
}
}
public function click_response_form() {
$the_form = '<form id="theForm" method="post" action="">' .
wp_nonce_field( 'post_filter_action', 'post_filtration' ) .
'<input name="action" type="hidden" value="the_ajax_hook" />
<label class="check"><input type="checkbox" name="change_me" value="" onChange="submit_me();" /> Apasă aici pentru un răspuns</label>
</form>
<div id="response_area"></div>';
return $the_form;
}
}
new RespondToMyClicks();
Și iată codul fișierului meu Javascript:
function submit_me() {
jQuery("#response_area").fadeOut("slow");
jQuery.post(the_ajax_script.ajaxurl,
jQuery("#theForm").serialize(),
function(response_from_the_action_function){
jQuery("#response_area").html(response_from_the_action_function).fadeIn("fast");
}
)
}
M-am uitat la acest cod prea mult timp și am încercat diferite variante de cod, așa că sper că cineva poate să-mi arate ce este evident pentru că eu pur și simplu nu văd. Mulțumesc!

Suzanne
105
Comentarii
Toate răspunsurile la întrebare
1
0
Bine, deci ACUM am întreaga soluție. Au fost două lucruri:
- Cache-ul a fost prima parte a problemei. Am golit cache-ul și am dezactivat temporar plugin-ul de caching.
- A doua problemă, mai puțin evidentă, a fost că pentru utilizatorii care NU erau autentificați, răspunsul din apelul AJAX returna întregul document HTML în zona de răspuns. Se pare că aveam o funcție de "redirecționare" în fișierul functions.php care provoca acest lucru. Aceasta este concepută să redirecționeze utilizatorii cu roluri mai mici decât autor înapoi către front-end, astfel încât să nu acceseze niciodată backend-ul, iar admin-ajax.php în mod tehnic funcționează din partea de administrare, deci aceasta a fost problema.

Suzanne
105
5 sept. 2013 22:39:59
Întrebări similare
4
răspunsuri
2
răspunsuri
2
răspunsuri