Php 如何在Wordpress中加载Ajax
我熟悉在jQuery中以普通方式使用ajax。Php 如何在Wordpress中加载Ajax,php,jquery,ajax,wordpress,Php,Jquery,Ajax,Wordpress,我熟悉在jQuery中以普通方式使用ajax。 我已经玩了一段时间,但不明白Wordpress需要什么才能让它工作… 我这里的内容摘自一些教程或文章。 这在functions.php中(在子主题中): jQuery本身正在加载并且工作良好 我已经尝试了一些基本的ajax,如下所示: jQuery(document).ready(function($){ $('a.link').click(function(){ $.ajax({ url:
我已经玩了一段时间,但不明白Wordpress需要什么才能让它工作…
我这里的内容摘自一些教程或文章。
这在functions.php中(在子主题中): jQuery本身正在加载并且工作良好 我已经尝试了一些基本的ajax,如下所示:
jQuery(document).ready(function($){
$('a.link').click(function(){
$.ajax({
url: ajax_script.ajaxurl,
data: ({action : 'function1'}),
success: function(data){
$('#result').html(data);
}
});
return false;
});
});
var translation = {
success: "Success!",
failure: "Failure!",
error: "Error!",
...
};
除此之外,我不知道如何测试它是否正确加载
这里的任何帮助都将不胜感激
编辑:在firebug中,出现以下错误:
ReferenceError: ajax_script is not defined
url: ajax_script.ajaxurl,
首先,你应该仔细阅读这一页 其次,
ajax\u脚本
没有定义,所以您应该更改为:url:ajaxurl
。我在上面的代码中没有看到您的function1()
,但您可能已经在其他文件中定义了它
最后,学习如何使用Firebug调试ajax调用,网络和控制台选项卡将是您的朋友。在PHP方面,
print\u r()
或var\u dump()
将是您的朋友。我认为既然已经加载了js文件,我就不需要在单独的add\u ajax函数中再次加载/排队。但这一定是必要的,否则我就这么做了,现在它开始工作了 希望你能帮助别人 以下是问题中更正的代码:
// code to load jquery - working fine
// code to load javascript file - working fine
// ENABLE AJAX :
function add_ajax()
{
wp_enqueue_script(
'function',
'http://host/blog/wp-content/themes/theme/js.js',
array( 'jquery' ),
'1.0',
1
);
wp_localize_script(
'function',
'ajax_script',
array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
$dirName = get_stylesheet_directory(); // use this to get child theme dir
require_once ($dirName."/ajax.php");
add_action("wp_ajax_nopriv_function1", "function1"); // function in ajax.php
add_action('template_redirect', 'add_ajax');
根据你的要求,我已经给你答复了 正如Hieu Nguyen在他的回答中所建议的,您可以使用ajaxurl javascript变量来引用admin-ajax.php文件。但是,此变量未在前端声明。通过将以下内容放在主题的header.php中,在前端声明这一点很简单
<script type="text/javascript">
var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
</script>
因此,这只是将一个对象加载到HTML头标记中。这可以通过以下方式利用:
后端:
<script type="text/javascript">
jQuery.ajax({
url: ajaxurl,
data: {
action: 'my_action_name'
},
type: 'GET'
});
</script>
<?php
function my_ajax_callback_function() {
// Implement ajax function here
}
add_action( 'wp_ajax_my_action_name', 'my_ajax_callback_function' ); // If called from admin panel
add_action( 'wp_ajax_nopriv_my_action_name', 'my_ajax_callback_function' ); // If called from front end
?>
wp_localize_script( 'FrontEndAjax', 'ajax', array(
'url' => admin_url( 'admin-ajax.php' )
) );
这种方法的优点是,它可以在主题和插件中使用,因为您不需要将ajax URL变量硬编码到主题中
在前端,现在可以通过
ajax.URL
访问URL,而不是在前面的示例中简单地使用ajaxurl
。我个人更喜欢在wordpress中使用ajax,就像在任何其他站点上使用ajax一样。我创建了一个处理所有ajax请求的处理器php文件,只需使用该URL即可。这是因为htaccess在wordpress中不可能实现,所以我做了以下工作
1.在我的wp content文件夹中的htaccess文件中,我在已经存在的内容下面添加了这个
<FilesMatch "forms?\.php$">
Order Allow,Deny
Allow from all
</FilesMatch>
显然,你可以加入任何你以前喜欢的、成功或错误类型的东西……但这是(我相信)更简单的方法是避免在8个不同的地方告诉wordpress将要发生的事情,这也让你避免做你看到的其他事情,他们将js代码放在页面上,这样他们就可以进入php,我更喜欢将我的js文件分开 使用wp_本地化_脚本并将url传递到那里:
wp_localize_script( some_handle, 'admin_url', array('ajax_url' => admin_url( 'admin-ajax.php' ) ) );
然后在js中,您可以通过
admin_url.ajax_url
我不允许发表评论,所以关于Shane的回答,请记住
wp\u本地化脚本()
必须连接到wp或管理队列脚本。因此,一个很好的例子如下:
function local() {
wp_localize_script( 'js-file-handle', 'ajax', array(
'url' => admin_url( 'admin-ajax.php' )
) );
}
add_action('admin_enqueue_scripts', 'local');
add_action('wp_enqueue_scripts', 'local');`
已经在使用firebug了,正如我在问题末尾所说的。熟悉打印和变量转储。我自己也在继续工作,但只是希望有人能发现上面代码的错误(如果有),或者提出一种替代方法。我对你建议的url做了更改,但没有改变任何东西-仍然说未定义。我的function1()在ajax.php文件中,但它没有做任何特殊的事情。现在我只想得到任何回应。谢谢你的输入。现在到底什么是未定义的?如果它抱怨
ajax\u脚本未定义
,那么您就在其他地方找到了它。引用错误:ajaxurl未定义url:ajaxurl。。。。。刚刚从firebug.ajaul中粘贴的内容在前端不可用-它在管理面板中定义,但仅此而已。如果您想在前端定义它,那么在header.php中可以使用以下内容:var ajaxurl=“”@谢恩-对不起,我直到现在才看到这个评论。我只是自己为这个问题补充了一个答案。我认为“添加”操作("wp_ajax_nopriv_uu涵盖了前端使用。WordPress已经内置了适当的机制-为什么要重新发明轮子?我个人认为他们的方式非常笨拙-作为一名开发人员,我宁愿访问我想要的任何包含逻辑的文件。通常我构建一个包含不同ajax端点文件库的文件夹,这些文件返回一个json string。是否必须为每个文件在.htaccess中添加新的文件排除规则,或者是否有“混合”的方法WordPress方法的正常方法是,使用一个处理文件,使用无限函数,并调用处理文件中的函数?我的wp content文件夹没有.htaccess文件。这有几种方法是错误的。您有代码中不存在的函数的挂钩。
admin_url.ajax_url
function local() {
wp_localize_script( 'js-file-handle', 'ajax', array(
'url' => admin_url( 'admin-ajax.php' )
) );
}
add_action('admin_enqueue_scripts', 'local');
add_action('wp_enqueue_scripts', 'local');`