AJAX函数不返回任何结果

时间:2012-04-30 作者:Jonas

当我单击一个链接时,我试图创建一个ajax调用,该链接是帖子缩略图,结果应该显示帖子内容。

当我使用管理ajax时。php它工作得很好,但问题是URL无法访问。

这是我的ajaxcall

    $.ajax({
        //url: admin_url +  \'/wp-admin/admin-ajax.php\',
        url: href + \'?action=ajax\',
        dataType: \'json\',
        data: {
            //action: \'ajax\',
            post_id: post_id
        },

        success: function(data) {
            console.log("Succes");
            row.before(\'<div id="case" class="twelve columns omega alpha"></div>\');
            $("#case").slideUp(1);
            $("#case").html(data).slideDown(speed);

            $("#header, #featured, .row").animate({\'opacity\': halfOpacity}, speed);
            return false;
        },
        error: function() {
            console.log("Error");
            window.location = href;
        }
    });
这是函数中的php。php

  function ajax() {

    global $wpdb;
    global $post;
    $id = $_GET[\'post_id\'];

    $querystr = "
        SELECT $wpdb->posts.*
        FROM $wpdb->posts
        WHERE $wpdb->posts.ID = $id
    ";

    $post = $wpdb->get_results($querystr);

    $response = $post[0]->post_content;
    $response = json_encode($response);

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

1 个回复
SO网友:Tomas Buteler

关于jQuery部分:

除了我们无法知道您最终指向哪个URL之外,一切看起来都正常。通过在Chrome或Safari中使用Firebug或WebKit的开发工具,并相应地编辑代码,您可以看到URL、发送的标题和服务器的响应。

由于我经常使用AJAX,我发现在我的header.php:

<?php if(!is_admin()) : ?>

<script type="text/javascript"> 
//<![CDATA[
    ajaxurl = \'<?php echo(admin_url(\'admin-ajax.php\')); ?>\';
//]]>
</script>

<?php endif; ?>
这样,我就有了一个全球ajaxurl Javascript变量,该变量将始终指向正确的AJAX url。

但我敢打赌,问题在于PHP部分。您缺少将PHP函数注册为WordPress AJAX操作的行。没有它们,WordPress永远猜不到ajax()函数实际上是一个ajax函数。

把这个放在你的functions.php:

add_action(\'wp_ajax_nopriv_my_custom_callback\', \'my_custom_callback\');
add_action(\'wp_ajax_my_custom_callback\', \'my_custom_callback\');
这里的逻辑是WordPress将检查action 内部时的参数admin-ajax.php, 并触发动作wp_ajax_{action}, 这反过来又与回调相关联my_custom_callback. 第一行(带有nopriv 位)是可选的,只有当您想向未登录的用户提供AJAX功能时,才应该使用它。

在你的具体情况下(尽管我strongly 推荐比ajax 作为函数名),它将如下所示:

add_action(\'wp_ajax_nopriv_ajax\', \'ajax\');
add_action(\'wp_ajax_ajax\', \'ajax\');
告诉我进展如何,好吗?

结束

相关推荐

ajax not working in plugin

下面的代码在WordPress之外运行得很好,但当我试图在WordPress内部执行它时,什么都没有发生:var js = jQuery.noConflict(); js(document).ready(function(){ js(\'#ClientID\').live(\'change\', function() { js.ajax({ url : \'includes/form.php\',