AJAX返回正确的数据,但位于错误的位置

时间:2014-04-04 作者:bestprogrammerintheworld

我正在尝试如何在Wordpress中正确使用AJAX:(我在其他网站上使用过,但在WP中没有使用过)

我在函数中有这个代码。主题的php:

function jquery_stuff() {
    wp_enqueue_script(\'jquery\');
    wp_enqueue_script(\'scriptname\', get_bloginfo(\'template_url\') . \'/wibergsweb.js\');
}
add_action( \'init\', \'jquery_stuff\');

//AJAX
add_action(\'wp_ajax_locationContent\', \'locationContent\');

function locationContent() {
    echo \'batman returns\';
    die();
}
这就是jQuery的外观:

function loadLocationInfo(clickedOn) {   
        var locationId = clickedOn.next().attr(\'id\');


        var locationContent = $.ajax({            
            type: \'POST\',
            data:{
                action: \'locationContent\',
                location_id: locationId
            },
            url: "/wp-admin/admin-ajax.php",
            dataType: \'json\'
        });

        locationContent.done(function(data) {  
            alert(\'DONE\');    
        });                        

        locationContent.fail(function(ts) {           
            alert(\'ERROR\');
            clickedOn.next(\'.location-info\').html(ts.responseText);
            $(\'body\').css(\'cursor\', \'pointer\');
            clickedOn.css(\'cursor\', \'pointer\');
       });
    } 

    $(document).on(\'click\', \'h3\', function(e) {
        var tClicked = $(this);
        loadLocationInfo(tClicked);
    });
为什么在fail-作用(是的,数据返回正确。这是其中奇怪的部分)。

事情就是这样:

1. ERROR is shown in alert-dialog. 
2. The .location-info div is set to \'batman returns\'
如果php中没有这样的die():

function locationContent() {
    echo \'batman returns\';    
}
然后a0 已返回BUTdone()-函数(在预期位置返回的数据不正确)

为什么在fail-function 我该如何解决这个问题?(我不知道这里发生了什么事)

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

您将从AJAX调用返回的数据类型指定为JSON。但是,返回的字符串(“蝙蝠侠开始”)不是JSON格式。因此,jQuery ajax调用将失败。尝试使用json_encode:

function locationContent() {
    echo json_encode( \'batman returns\' );
    die();
}
这将解决您的问题。

此外,我可以建议您在函数前面加前缀,并遵守WordPress PHP Coding Standards (myplugin_locationcontent 而不是locationContent, 例如)。

结束

相关推荐

Disable Ajax for Spiders

我们在wpegnine上有一个网站,每天访问量约为2万次,在很大程度上依赖ajax作为我们的入站营销策略(潜在客户/访客处理)。这些ajax调用正在破坏我们的服务器性能。我认为,缓解我们的问题的一个好方法是为爬行器禁用对wp admin的所有AJAX调用。他们不需要看到我们对行动的动态调用,我们也不需要任何访问者跟踪这些蜘蛛。我们如何设置我们的机器人。txt或更好的解决方案中的代码可以防止爬行器使用这些资源?