Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Wordpress中加载Ajax_Php_Jquery_Ajax_Wordpress - Fatal编程技术网

Php 如何在Wordpress中加载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:

我熟悉在jQuery中以普通方式使用ajax。
我已经玩了一段时间,但不明白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');`