web-dev-qa-db-fra.com

Un simple appel ajax ne fonctionne pas dans le plugin wordpress

Je suis pratique pour créer un plugin ajax wordpress simple. J'ai référencé la documentation wordress ajax et quelques tutoriels pour créer un plugin. Comment puis-je passer les valeurs pour obtenir le résultat du fichier php. Le même code que j'ai créé en php normal cela fonctionne très bien. Comment puis-je résoudre ça. Voici les codes que j'ai créés.

index.php

<?php
 /*
  Plugin Name: Ajax Serach
 */
  function my_assets() {

  wp_enqueue_style( 'pubmed-style', plugin_dir_url( __FILE__ ).'css/pubmed-style.css' );
  wp_enqueue_script( 'pubmed-script', plugin_dir_url( __FILE__ ).'js/pubmed-script.js', array('jquery'), true );

 wp_localize_script( pubmed-script, litsearch, array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));

 }

  add_action( 'wp_enqueue_scripts', 'my_assets' );
?>

 <?php
    function pubget(){
  ?>     
<input type="text" name="" value="" id="sterm"/> 
<input type="button" name="" value="Search term" id="pub_search"/>

<div id="container">olddata</div>

 <?php
 }
 add_shortcode('pubajax', 'pubget');
 ?>

Test.php

<?php 
class Testclass{
    function infotext(){
        $txt = 'This is a ajax response text';
    }
}
 ?>

Pub.php

<?php
function litsearch(){
    $newterm = $_GET['nwterm'];
    $newtest = new Testclass();
    if($newterm == $_GET['nwterm']){
        include('test.php');
        $newtest = new Testclass();
        $newtest->infotext();
    }
    die();
}
add_action('wp_ajax_litsearch', 'litsearch');
add_action('wp_ajax_nopriv_litsearch', 'litsearch');
 ?>

mainjquery.js

jQuery( document ).ready(function(){
//alert("Jquery Loaded");
  jQuery("#pub_search").click(function(){
    alert("You clicked");
            event.preventDefault();           
            var term= $("#sterm").val();
            console.log('your term send: '+term);
            var data = {'nwterm': term }            
           $.get(litsearch.ajaxurl, data, function(data){
            $("#container").html(data);
          });
        });
});
1
muraliniceguy97

Vous devez mettre le nom de votre action wp ajax dans vos données lorsque vous effectuez l'appel ajax.

Je suppose que l'URL ajax est correct.

jQuery( document ).ready(function(){
//alert("Jquery Loaded");
  jQuery("#pub_search").click(function(){
    alert("You clicked");
            event.preventDefault();           
            var term= $("#sterm").val();
            console.log('your term send: '+term);
            var data = {'nwterm': term, 'action': 'litsearch'}            
           $.get(litsearch.ajaxurl, data, function(data){
            $("#container").html(data.response);
          });
        });
});

Aussi, parce que vous voulez mettre une réponse dans votre code html, vous devez renvoyer quelque chose du serveur.

Test.php

<?php 
class Testclass{
    function infotext(){
        $txt = 'This is a ajax response text';
        return $txt;
    }
}
 ?>

Pub.php

<?php
function litsearch(){
    $newterm = $_GET['nwterm'];
    $newtest = new Testclass();
    $data = array();
    if($newterm == $_GET['nwterm']){
        include('test.php');
        $newtest = new Testclass();
        $data['response'] = $newtest->infotext();
    }
    wp_send_json( $data );
}
add_action('wp_ajax_litsearch', 'litsearch');
add_action('wp_ajax_nopriv_litsearch', 'litsearch');
 ?>
1
Laxmana