web-dev-qa-db-fra.com

php problème ajax - 301 réponses étranges!

hé les gars, j'ai vraiment besoin de votre aide. Je n'ai aucune idée pourquoi cela se produit.

J'essaie de charger une page wordpress avec la méthode jquery $ ajax. Cependant, mon navigateur se bloque tout le temps lorsque j'essaie de charger cette page.

J'ai construit une sorte de recherche ajax qui demande une page wordpress lors de la saisie à l'intérieur d'un champ de saisie. Ceci est mon code.

jqXHR_Old = $.ajax({
       url: "searchmap", // searchmap means mydomain.com/searchmap
       dataType: "html",
       success: function (data) { ...

La chose étrange est: quand je change l'URL en une page statique comme url: "searchmap.html" tout fonctionne bien. Dès que je choisis la "mapmap" générée dynamiquement dans Wordpress Template, la réponse ajax envoie des messages "301 déplacés de façon permanente".

Ceci est mon modèle qui fonctionne très bien quand je l'appelle dans le navigateur ...

<div>
    <h3>Pages</h3>
        <ul>
            <?php wp_list_pages('title_li=&depth=0&exclude='); ?>
        </ul>
    <h3>Posts</h3>
        <?php $first = 0;?>
        <ul>
        <?php
        $myposts = get_posts('numberposts=-1&offset=$first');
        foreach($myposts as $post) :
        ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endforeach; ?>
        </ul>
    <h3>Categories</h3>
        <ul>
            <?php wp_list_categories('title_li=&orderby=name'); ?>
        </ul>
</div>

Avez-vous une idée du pourquoi Firebug ou Fiddler répond par l’erreur "301 déplacés de façon permanente" lorsque je charge cette page avec $ .ajax ()?

Mon navigateur ne cesse de planter, même si j'abandonne chaque demande ajax lors d'une nouvelle saisie. Donc, il ne se passe jamais plusieurs demandes ajax.

$ .ajax request mydomain.com/searchmap et mydomain.com/searchmap demande le serveur pour toutes les pages, les publications et les chats.

Des idées? Je suis complètement désemparé!

1
mathiregister

Je devine que la page de votre appel exécute un wp_redirect avec une réponse 301 quelque part. Ne pas vraiment avoir une réponse pour vous, mais peut-être que vous pouvez essayer ce qui suit. Ajax ne sait pas de quel type de page vous appelez et il se peut que certains query_vars étranges chargés déclenchent une redirection.

  • Si vous utilisez un lien permanent pour charger la page, pouvez-vous utiliser un lien non permanent?
  • faites une recherche de texte dans votre dossier de plugins pour wp_redirect afin de voir si quelque chose se présente.

Action d'appel Ajax.

    var response;
jQuery.post(
    // see tip #1 for how we declare global javascript variables
    MyAjax.ajaxurl,
    {
        // here we declare the parameters to send along with the request
        // this means the following action hooks will be fired:
        // wp_ajax_nopriv_myajax-submit and wp_ajax_myajax-submit
        action : 'searchmap',

        // other parameters can be added along with "action"
        postID : MyAjax.postID,
        count : '16'
    },
    function( response ) {
        jQuery("#div-searchmap").html(response);
        jQuery("#div-searchmap").show();
    }

);

Si vous voulez utiliser wp_ajax, vous devrez en ajouter un peu plus.

    // declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php)
    wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
    // this hook is fired if the current viewer is not logged in
    if (isset($_GET['action'])) {
    do_action( 'wp_ajax_nopriv_' . $_GET['action'] );
    }
    // if logged in:
    if (isset($_POST['action'])) {
    do_action( 'wp_ajax_' . $_POST['action'] );
    }
        if(is_admin()) {
        add_action( 'wp_ajax_searchmap', 'my_searchmap_function' );
        } else {
        add_action( 'wp_ajax_nopriv_searchmap', 'my_searchmap_function' );
}

J'utilise POST variable pour mon script ajax afin qu'il fonctionne toujours sous admin. Si vous écrivez le script jQuery avec GET, vous devrez appeler la fonction norpriv en dehors de admin. (vient de comprendre cela maintenant)

Vous devrez peut-être corriger le script ici et là, il ne s'agit que d'un exemple désinvolte.

la fonction doit renvoyer les données dont vous avez besoin. Par exemple:

function my_searchmap_function() {
// Start output buffer
ob_start();
?>
div>
    <h3>Pages</h3>
        <ul>
            <?php wp_list_pages('title_li=&depth=0&exclude='); ?>
        </ul>
    <h3>Posts</h3>
        <?php $first = 0;?>
        <ul>
        <?php
        $myposts = get_posts('numberposts=-1&offset=$first');
        foreach($myposts as $post) :
        ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endforeach; ?>
        </ul>
    <h3>Categories</h3>
        <ul>
            <?php wp_list_categories('title_li=&orderby=name'); ?>
        </ul>
</div>  
<?php 

    $output = ob_get_contents();

    // Stop output buffer
    ob_end_clean();
    $response = json_encode($output);

    // response output
    header( "Content-Type: application/json" );
    echo $response;

    // IMPORTANT: don't forget to "exit"
    exit;
}
3
Patriek