mathiregister
  • 0
Новичок

Проблема Php ajax — странные ответы 301!

  • 0

эй, ребята, мне действительно очень нужна ваша помощь. Я просто понятия не имею, почему это происходит.

Я пытаюсь загрузить страницу WordPress с помощью метода jquery $ajax. Однако мой браузер постоянно падает, когда я пытаюсь загрузить эту страницу.

Я создал своего рода поиск ajax, который запрашивает страницу WordPress при вводе текста внутри поля ввода. Это мой код.

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

Странно: когда я меняю URL-адрес на статическую страницу, url: "searchmap.html" все работает нормально. Как только я выбираю динамически сгенерированный шаблон WordPress «searchmap», ответ ajax выдает сообщения «301 Moved Permanetly».

Это мой шаблон, который отлично работает, когда я вызываю его в браузере…

<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>

Любая идея, почему Firebug или Fiddler отвечают ошибками «301 Moved Permanently», когда я загружаю эту страницу с помощью $.ajax()?

Мой браузер продолжает падать, хотя я прерываю каждый запрос ajax при повторном вводе. Таким образом, никогда не бывает нескольких запросов ajax.

$.ajax запрашивает mydomain.com/searchmap, а mydomain.com/searchmap запрашивает сервер для всех страниц, сообщений и кошек.

Есть идеи? Я совершенно не в курсе!

Share
  1. Я предполагаю, что страница, на которую вы звоните, где-то выполняет wp_redirect с ответом 301. На самом деле у вас нет ответа, но, возможно, вы можете попробовать следующее. Ajax не знает, с какого типа страницы вы звоните, и могут быть загружены какие-то странные query_vars, которые вызывают перенаправление.

    • Вы используете постоянную ссылку для загрузки страницы, можете ли вы попробовать использовать URL-адрес без постоянной ссылки?
    • выполните текстовый поиск в папке вашего плагина для wp_redirect, чтобы увидеть, не появится ли что-нибудь.

    Действие вызова 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();
        }
    
    );
    

    Если вы хотите использовать wp_ajax, вам нужно будет добавить еще несколько.

        // 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' );
    }
    

    Я использую переменную POST для своего ajax-скрипта, поэтому он всегда запускается в админке, если вы пишете jquery-скрипт с помощью GET, вам нужно будет вызвать функцию norpriv вне админа. (только сейчас это понял)

    Возможно, вам придется исправить сценарий здесь и там, это просто пример навскидку.

    функция должна возвращать нужные вам данные. Например:

    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;
    }
    
    • 0
    • Спасибо за ваш ответ. что вы подразумеваете под адресом непостоянной ссылки? Однако wp_redirect — хороший совет. Я ищу все плагины для него, и два активных плагина используют его. Однако, даже если я деактивирую их, все еще будет запущено несколько 301, и мой браузер выйдет из строя. Не понимаю. Есть ли что-то вроде remove_all_filters() переадресации? Так что я мог бы просто избавиться от каждого перенаправления, фильтра и действия в моей карте поиска?

      • 0
    • URL-адрес непостоянной ссылки похож на my_domain.com?page=3. Независимо от того, какой у вас номер страницы. Я не могу вспомнить, чтобы был файл remove_all_redirects. Что вы можете, так это превратить запрос из html в обычный вызов ajax, который выполняет функцию. таким образом, вам не придется ни о чем беспокоиться. Я добавлю пример в свой ответ.

      • 0
    • спасибо за вашу помощь.. несколько вопросов, прежде чем я попытаюсь реализовать это. Почему if(is_admin()) { ? Запрос ajax должен работать для всех посетителей. Мне просто заменить мой jqXHR_Old = $.ajax({ на ваш jQuery.post( ? Добавлять ли хуки add_action в файл functions.php?

      • 0
    • Администратор необязателен, но, если я правильно помню, все вызовы ajax выполняются в режиме администратора. Я использую его таким образом для переднего веб-сайта, и он отлично работает. Я думаю, вам нужно переписать свой ajax, чтобы использовать wp_methods для ajax, думаю, вы используете метод jquery.

      • 0
    • так как я никогда раньше не работал с ajax и у меня было много проблем с настройкой моего ajax-скрипта, это слишком много для меня :)… для чего нужны вызовы add_action? my_searchmap_function? Что он содержит/делает? Я имею в виду, что это не может быть так сложно, не так ли? Я просто хочу загрузить и обработать сгенерированную страницу wordpress с помощью jquery и ее функций ajax. Я действительно ценю твою помощь. еще раз спасибо!

      • 0

Оставить ответ

You must login to add an answer.