WordPress AJAX没有像我预期的那样工作。怎么了?

时间:2011-09-15 作者:gaoshan88

在函数中。php我有:

function testajax() {
echo "test";
exit;
}

add_action(\'wp_ajax_testthisajax\', \'testajax\');
add_action(\'wp_ajax_nopriv_testthisajax\', \'testajax\');
在脚本中。js我有:

$("#thisformsid").submit( function() {
        $.ajax({
            url: CustomAjax.ajaxurl,
            type: "POST",
            data: {
                action: \'testthisajax\'
            },
            success: function(result){
                    console.log(\'success: \', result);
                },
                error: function(xhr){
                    console.log(xhr.status);
                },
                complete: function(result){
                    console.log(\'complete: \', result);
                }
        })
    });
我的表单使用了正确的id,我可以在脚本中访问ajax提交。js文件

url在脚本中定义。js类:

var CustomAjax = {
    ajaxurl: "/wp-admin/admin-ajax.php"
};
然而,这失败了。在控制台中,我看到一个错误和返回的值“0”。你知道为什么这行不通吗?这似乎是基本的,不应该出错,但我看不出问题所在。有什么想法吗?

<小时>Update:在控制台中,我看到错误标记在我安装的jquery的第18行(它被缩小了,所以我不知道那一行实际是什么)?为什么jquery会出现问题?

4 个回复
SO网友:Rarst

首先尝试在没有JS的情况下执行此操作。只需访问链接yoursite.com/wp-admin/admin-ajax.php?action=testthisajax.

0 看起来有点效果,但不是很好。如果我没记错的话,失败的请求应该是-1.

SO网友:kaiser

你排队了吗jquery-form? 还要查找依赖项。如果查看第三个参数,就会发现可以设置它们。所以应该有jquery 首先排队并注册,然后jquery-form 然后是你的定制物品。

SO网友:Chris_O

尝试使用定义CustomAjax urladmin_url( \'admin-ajax.php\' )

<?php print("var CustomAjax = \'" . admin_url( \'admin-ajax.php\' ) . "\';\\n");?>
更好的方法是使用wp\\u localize\\u脚本传递AjaxUrl:

wp_enqueue_script( \'scripts\', get_bloginfo( \'stylesheet_directory\' ) . \'/js/scripts.js\', array( \'jquery\', \'jquery-ui\' ), false);
wp_localize_script( \'scripts\', \'CustomAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );

SO网友:Maciej Kuś

我尝试了你的代码,效果很好-我在我的域上得到了“成功:测试”。

但是,通过将ajax url从:mydomain更改为“0”,我成功地获得了“0”。com/wp-admin/admin-ajax。php towww。mydomain。com/wp-admin/admin-ajax。php

使用ajax,您只能向同一个域发出请求。你的情况是这样吗?

结束

相关推荐

通过AJAX加载页面并显示标题

一次小规模的、可能很简单的咨询。我通过Ajax加载页面,如下所示:jQuery(\"div.menu a\").addClass(\"ajax\"); var hash = window.location.hash.substr(1); var href = jQuery(\'.ajax\').each(function(){ var href = jQuery(this).attr(\'href\'); if(hash==href.substr(