当不同元素被点击时,使用AJAX获得不同的元值

时间:2015-07-09 作者:CK13

我有一个自定义帖子类型的英雄,每个英雄都有一些咒语,咒语图标、名称、描述存储在自定义字段中(通过“自定义字段套件插件”可重复的字段)。

我想做的是显示咒语的名称和图标,当单击图像/名称时,通过ajax获得咒语描述。

我很难对每个咒语进行不同的描述。

这是我到目前为止得到的。

PHP(functions.PHP):

add_action( \'wp_enqueue_scripts\', \'ajax_test_enqueue_scripts\' );

function ajax_test_enqueue_scripts() {
    wp_enqueue_script( \'ajax\', get_template_directory_uri() .\'/js/ajax.js\', array(\'jquery\'), \'1.0\', true );
}


add_action( \'wp_ajax_ajax_action\', \'ajax_action\' ); // ajax for logged in users
add_action( \'wp_ajax_nopriv_ajax_action\', \'ajax_action\' ); // ajax for not logged in users

function ajax_action() 
{

    $fields = CFS()->get(\'spells\', 18);
    exit(json_encode($fields)); // stop executing script

}
PHP(模板文件):

$fields = CFS()->get(\'spells\');
foreach ($fields as $field) {
    echo \'<div style="overflow:hidden;clear:both"><div style="float:left;padding: 2rem 1rem;width: 125px;" class="click-\'. $field[\'key_id\'] .\'"><img src="\'. $field[\'icon\'].\'"></div>\';
    echo \'<span style="float:left;padding: 2rem;width:100%;max-width: 800px;"><strong>\'.$field[\'name\'].\'</strong></span></div>\';
}
Javascript:

jQuery(document).ready(function($) 
{
    $.ajax({
        url: ajaxurl,
        data: {
            \'action\':\'ajax_action\',
            \'post_id\' : 18
        },
        success:function(data) {
            var hero = JSON.parse(data);

            for(var i of hero){
                $(\'.click-\' + i.key_id).click(function(){
                    $(\'.changing\').html(hero[1][\'description\']);
                })
            }
        }
    });
})
我搞不懂的是如何获得正确拼写的正确描述。

$field[\'key_id\'] 是每个咒语的数字1、2、3、4

控制台中的英雄对象。日志http://i.imgur.com/pXaGSgU.png

还有田地http://i.imgur.com/9o7dtRD.png

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

多亏了这个,我自己弄明白了Q&A. 问题在于closures in loops.

我真的无法解释发生了什么,但这对我很有用。

jQuery(document).ready(function($){
    $.ajax({
        url: ajaxurl,
        data: {
            \'action\':\'ajax_action\',
            \'post_id\' : 18
        },
        success:function(data) {
            var hero = JSON.parse(data);
            function createCallback( i ){
              return function(){
                $(\'.changing\').html(hero[i][\'description\']);
              }
            }

            $(document).ready(function(){
              for(var i = 0; i < hero.length; i++) {
                $(\'.click-\' + i).click( createCallback( i ) );
              }
            });
        }
    });
})

结束

相关推荐

SSL中断定制器:页面未从AJAX返回

我使用Comodo SSL证书安装了WordPress。我有WordPress HTTPS plugin 已安装,我正在使用AZ主题,管理员设置为通过HTTPS加载。到目前为止还不错。在主题定制器上,我得到了一个永久加载图标(不要与WSOD混淆)。带回主页内容的AJAX调用为空,除了WP_CUSTOMIZER_SIGNATURE 代币这就是所有的回应。当我禁用WordPress HTTPS插件(或者禁用通过SSL加载管理员)时,定制器工作得很好。禁用/启用其他插件无效。这也发生在股票二十一五主题中(如下图