使用jQuery和AJAX访问API

时间:2014-08-25 作者:whocares2021

作为概念证明,我正在尝试使用jQuery和AJAX访问API,并将结果发布到页面。在完成了一些在线教程并尽最大努力将其整合在一起之后,我有以下几点:

功能。php:

//Fire Customizr
require_once( get_template_directory() . \'/inc/init.php\' );
function my_init() {
    if (!is_admin()) {
        wp_deregister_script(\'jquery\');
        wp_register_script(\'jquery\', \'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\', false, \'1.3.2\', true);
        wp_enqueue_script(\'jquery\');

        // load a JS file from my theme: js/theme.js
        wp_enqueue_script(\'instant_search\', get_bloginfo(\'template_url\') . \'/js/instant_search.js\', array(\'jquery\'), \'1.0\', true);

        wp_localize_script( \'my_js_function\', \'my_ajax_script\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );

    }
}
add_action(\'template_redirect\', \'my_init\', \'init\');

$dirName = dirname(__FILE__);
$baseName = basename(realpath($dirName));
require_once ("$dirName/twitter_search.php");
add_action("wp_ajax_get_my_option", "get_my_option");
twitter\\u搜索。php:

$username = (empty($_REQUEST[\'username\'])) ? FALSE : $_REQUEST[\'username\'];

function get_my_option(){
    if($username !== FALSE){
        $url = \'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=\'.$username.\'&count=5&include_entities=1&include_rts=1\';
        // Get cURL resource
        $curl = curl_init();
        // Set some options
        curl_setopt_array($curl, array(
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_URL => $url
        ));
        // Send the request & save response to $resp
        $resp = curl_exec($curl);
        // Close request to clear up some resources
        curl_close($curl);
        if($resp){
            echo json_encode($resp);
        }
    }
}
instant\\u搜索。js公司

jQuery(document).ready(function(){
    var user = $(\'#username\');
    var result = $(\'#resp\');
    $(\'#grab\').click(function(){
        if(user.val() !== \'\'){
            var config = {
                username: user.val()
            }

            function my_js_function(){
                jQuery.ajax({
                    url: my_ajax_script.ajaxurl,
                    dataType: "json",
                    data: ({action : \'get_my_option\'}),
                    success: function(json){
                        for(x in json){
                            result.append(json[x].text);
                        }
                    }
                })
            };

        }
    }) 
});
WordPress中的页面帖子:

<input type="text" id="username">
<button id="grab">Grab!</button>
<div id="resp">

</div>
我觉得我接近正确,但在解决这个问题时有点过头了。任何帮助都将不胜感激。

1 个回复
SO网友:Welcher

您的功能有一些问题。可能是问题所在的php文件。

您应该使用wp\\u enqueue\\u scripts操作将脚本排入队列wp_localize_script() 应与已排队的文件的id匹配here 了解更多详细信息

希望这有帮助!

require_once( get_template_directory() . \'/inc/init.php\' );

function my_init() {
    if (!is_admin()) {

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


        // load a JS file from my theme: js/theme.js
        wp_enqueue_script(\'instant_search\', get_bloginfo(\'template_url\') . \'/js/instant_search.js\', array(\'jquery\'), \'1.0\', true);

        //id must match the enqueued script id
        wp_localize_script( \'instant_search\', \'my_ajax_script\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );

    }
}

//use this action instead
add_action( \'wp_enqueue_scripts\', \'my_init\');



$dirName = dirname(__FILE__);
$baseName = basename(realpath($dirName));
require_once ("$dirName/twitter_search.php");

//this will work for logged in users only
add_action("wp_ajax_get_my_option", "get_my_option");

//this will work for non-logged in peeps
add_action("wp_ajax_no_priv_get_my_option", "get_my_option");
编辑:

通过在文档中放置警报,确保您的脚本正在排队。就绪()。此外,如果您计划在函数中使用$而不是jQuery,那么应该将$传递给它。

jQuery.(document).ready(function($){
    alert(\'loaded all the things\');
    $(\'.selector\').html(\'works only if $ is passed to the function\');
});
你有很多活动部件,如果不一步一步地去做,就不可能知道什么不起作用。按顺序尝试以下操作。

确认您的脚本已正确排队-wp\\u localize\\u脚本需要此选项-确认vars正在本地化-ajax\\u url需要此选项(提示:检查页面的源代码)

  • 确认ajax正在调用并正确返回响应-需要此选项以获取数据-确认您的ajax方法正在执行的任何操作都实际有效,并执行您想要的操作。它正在访问Twitter,是否需要进行身份验证。我很确定他们不赞成api的v1
  • 深入了解更多细节基本上是为了您,所以我将把细节留给您:)

    祝你好运!

    结束

    相关推荐

    插件在AJAX调用中不起作用

    我正在进行进度条购物体验(在我的WooCommerce网站上)。首先,用户选择计划(demo、home、business、premium),然后选择他想要的产品,最后我要向他们展示cart表。我使用以下代码使用AJAX发送项目(在同一模板中):<?php if(isset($_POST[\'action\'])) { global $woocommerce; $woocommerce->cart->empty_ca