作为概念证明,我正在尝试使用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>
我觉得我接近正确,但在解决这个问题时有点过头了。任何帮助都将不胜感激。
SO网友:Welcher
您的功能有一些问题。可能是问题所在的php文件。
您应该使用wp\\u enqueue\\u scripts操作将脚本排入队列的第一个参数wp_localize_script() 应与已排队的文件的id匹配如果Ajax调用需要对未登录用户起作用,您还需要为其添加no\\u priv版本。阅读一下here 了解更多详细信息这不是一个完整的答案,但在调试其余部分之前,您需要先修复WordPress部分。
希望这有帮助!
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深入了解更多细节基本上是为了您,所以我将把细节留给您:)
祝你好运!