PHP AJAX问题-奇怪的301响应!

时间:2011-03-27 作者:mathiregister

嘿,伙计们,我真的很需要你们的帮助。我不知道为什么会这样。

我正在尝试使用jquery$ajax方法加载wordpress页面。然而,当我尝试加载此页面时,我的浏览器一直在崩溃。

我构建了一种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永久移动”消息。

这是我的模板,当我在浏览器中调用它时,它工作得很好。。。

<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永久移动”错误吗。ajax()?

我的浏览器不断崩溃,即使我在再次键入时中止了每个ajax请求。因此,永远不会出现多个ajax请求。

$。ajax请求mydomain。com/searchmap和mydomain。com/searchmap向服务器请求所有页面、帖子和cat。

有什么想法吗?我完全不知道!

1 个回复
最合适的回答,由SO网友:Patriek 整理而成

我猜你调用的页面在某处执行了一个带有301响应的wp\\u重定向。我真的没有答案,但也许你可以试试下面的方法。Ajax不知道您的调用来自哪种类型的页面,并且可能会加载一些奇怪的query\\u vars来触发重定向。

如果您使用永久链接加载页面,是否可以尝试使用非永久链接urlAjax调用操作。

    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\\u 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\' );
}
我在ajax脚本中使用POST变量,这样它就可以在admin中运行,如果使用GET编写jquery脚本,则需要在admin外部调用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;
}

结束

相关推荐

如何处理不同版本的jQuery?

例如,如果您在使用jQuery 1.5的网站上有一个插件。并希望通过实现一个使用较旧版本jQuery的脚本来创建一个新插件,例如1.3。x或1.4。十、我知道这可能取决于调用的jQuery函数,但如果您真的必须同时使用1.5和一些较旧版本的jQuery。。你会如何处理这种情况?甚至可以同时使用两个不同版本的jQuery而没有缺点吗?谢谢