在短代码中运行Java脚本时出现问题

时间:2011-02-21 作者:Logan

我正在尝试为我的网站创建这个插件,它允许创建短代码从iTunes Search SDK中提取数据。我已经有了iTunes Search SDK javascript插件,可以从Search SDK中提取数据,但我遇到了将所需javascript放入短代码的问题。

我的代码如下所示:

<?php
add_action(\'init\', \'peb_init\');

function peb_init() {
    add_action(\'admin_head\', \'peb_admin_head\');
}

function peb_admin_head() {
    echo \'<script type="text/javascript">\';
    require_once(\'https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.js\');
    require_once(\'js.php\');
    echo \'</script>\';
}


add_filter(\'widget_text\', \'do_shortcode\');

add_shortcode(\'appPrice\', \'appPrice\');
function appPrice($atts) 
{
    $atts = shortcode_atts(
        array(
            \'id\' => \'\',
            \'class\' => \'\',
            \'container\' => \'\'
    ), $atts);
    return \'

    <script type="text/javascript">
    $(document).ready(function() {
        var url = \'iLookup.php\';

            query = $id;

            $.getJSON(url, {id:query}, function(json) {
            $(\'#results\').html(\'Price: \'+json.results[0].price+\'<br/>\');
            });

    });
</script>

    \';


}
如果有人知道为什么这行不通,我会非常感激。如果没有提供足够的信息,我将很乐意提供更多。

注意:没有错误消息,只是不起作用。我尝试过使用控制台日志,但仍然不起作用。插件的其余部分工作正常,但脚本除外。

4 个回复
SO网友:fuxia

jQuery正在运行compatibility mode 在WP中。而不是…

$(document).ready(function() {}
…使用…

jQuery(document).ready(function($) {}

SO网友:onetrickpony

我猜这是因为你没有逃脱单引号。尝试使用输出缓冲,代码更具可读性:

function appPrice($atts) 
{
    extract(shortcode_atts(
        array(
            \'id\' => \'\',
            \'class\' => \'\',
            \'container\' => \'\'
    ), $atts));
    ob_start();
    ?>

    <script type="text/javascript">
    $(document).ready(function() {
        var url = \'iLookup.php\';

            query = <?php echo $id; ?>;

            $.getJSON(url, {id:query}, function(json) {
            $(\'#results\').html(\'Price: \'+json.results[0].price+\'<br/>\');
            });

    });
</script>

    <?php
    return ob_get_clean();
}
此外,加载jquery的方式也很奇怪。为什么不:

 wp_deregister_script(\'jquery\');
 wp_register_script(\'jquery\', ("http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"), false, \'1.5.0\');
 wp_enqueue_script(\'jquery\');

SO网友:Otto

这里有几个主要问题。

1-jquery 1.5.0与以前的版本不兼容。因此,目前它还没有进入WordPress 3.1。您应该坚持使用WordPress附带的1.4.2。

2-以这种方式将脚本加载到页面中是不正确和奇怪的。请尝试以下操作:

add_action(\'admin_enqueue_scripts\', \'peb_enqueue\'); 
function peb_enqueue() {
    wp_enqueue_script(\'jquery\'); 
}

add_action(\'admin_head\', \'peb_admin_head\'); 
function peb_admin_head() {
    echo \'<script type="text/javascript">\';
    require_once(\'js.php\');
    echo \'</script>\'; 
}
3-所有jquery代码都需要使用“jquery”而不是“$”。或者,您需要使用以下代码:

jQuery(document).ready(function($) {
    // $() will work as an alias for jQuery() inside of this function
});
4-在PHP的字符串中包含PHP变量需要使用双引号。不计算单引号字符串。

5-您的基本JSON调用有缺陷,因为您只调用了“iLookup.php”。您不知道URL是什么,因此不能使用简单的相对URL。URL可以作为示例。com或示例。com/blog/2010/single post name。我在哪里找的。php文件实际位置?

6-如果您使用的是像这样的AJAX类型请求,那么应该使用内置的WordPress机制来完成。WP允许您处理AJAX请求,而无需调用单独的文件。只需将PHP放入主代码中的一个函数中,然后将该函数挂接到您自己类型的wp\\U ajax\\u*处理程序中。更多信息请点击此处:http://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Administration_Side

SO网友:t31os

试试这个,看看你能不能再继续。。

add_action(\'admin_init\', \'peb_init\');
function peb_init() {
    add_action(\'admin_head\', \'peb_admin_head\');
}
function peb_admin_head() {
    echo \'<script type="text/javascript">\';
    require_once(\'js.php\');
    echo \'</script>\';
}
add_filter(\'widget_text\', \'do_shortcode\');

add_shortcode(\'appPrice\', \'appPrice\');
function appPrice($atts) 
{
    $atts = shortcode_atts( 
        array(
            \'id\' => \'\',
            \'class\' => \'\',
            \'container\' => \'\'
        ), 
        $atts 
    );
    return "
    <script type=\'text/javascript\'>
    jQuery(document).ready(function($) {
        var url = \'iLookup.php\';
        query = $id;

        $.getJSON(url, {id:query}, function(json) {
            $(\'#results\').html(\'Price: \'+json.results[0].price+\'<br/>\');
        });
    });
    </script>
    ";
}
js中的内容。php文件?Echo语句输出更多JS?

NOTE: 分配时,现有代码未连接$idquery(因此它被逐字处理)。

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。