我正在尝试用Wordpress刷新仪表板上的一个小部件。
我的插件是用PHP编写的,但我正在尝试添加Jquery/AAJAX,以便在进行一些更改时刷新每个小部件。
PHP中的函数将下载并存储文件,然后将信息显示到小部件中。
我遇到的问题是:文件已成功下载并存储。但新的信息并没有显示出来。它保持不变。我相信这可能很简单,但我已经尝试了一段时间,但没有成功。
这是我的代码示例:
<?php
add_action( 'admin_footer', 'my_action_javascript' ); // Write our JS below here
function my_action_javascript() { ?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
'action': 'refresh_function',
};
setInterval(function() {
$.get(ajaxurl, data, function (result) {
});
},20000);
});
</script> <?php
}
add_action('wp_ajax_refresh_function', 'display_function');
PHP函数:
function display_function()
{
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
ftp_close($conn_id);
$path = __DIR__."/XML/File.xml";
$channel = simplexml_load_file($path);
echo "<div style='overflow:auto; height:400px;'>";
foreach ($channel->channel->item as $item)
{
echo "<div class='xppArticle'>";
echo "<h2>" . $item->title . "</h2>";
echo "<p>". set_paragraph_length_display($item->description, 250) . "(...)" . "</p>";
global $wpdb;
$query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_title = %s', $item->title);
$cID = $wpdb->get_var($query);
echo "<hr />";
echo "</div>";
}
echo "</div>";
}
我的理解是,我的AJAX会调用这个函数,它会正常工作。我想我错了,因为一旦我使用AJAX下载了一个新文件,屏幕上就不会显示任何新内容。
谢谢!
$.get(ajaxurl, data, function (result) {
$( '#my-dashboard-widget-content-element' ).html( result );
});
确保你有合适的动作集,就像另一个答案一样:
add_action('wp_ajax_refresh_function', 'display_function' );
add_action('wp_ajax_nopriv_refresh_function', 'display_function' );
此外,您应该使用nonce来验证它是一个授权的ajax请求。在php函数的末尾,不要忘记die();
如需全面概述,请查看http://codex.wordpress.org/AJAX_in_Plugins
好的,首先,远程设置脚本。这是我做的一个演示:
function ajaxurl(){
wp_enqueue_script('product-selector', get_template_directory_uri().'/js/ajax.js', array('jquery')); // Remotely place script in /js/ folder in my theme.
wp_localize_script('product-selector', 'MyAjax', array(
// URL to wp-admin/admin-ajax.php to process the request
'ajaxurl' => admin_url('admin-ajax.php'),
)
);
}
add_action('wp_head', 'ajaxurl');
下一步,你需要确保你排队没有特权以及管理员:
add_action('wp_ajax_nopriv_ajax_callback', 'ajax_callback');
add_action('wp_ajax_ajax_callback', 'ajax_callback');
在我的脚本中,"ajax_callback"是我运行的php函数。因此,您需要进行相应的调整。
此外,在您的js
中,您需要使ajaxUrl
看起来像:
MyAjax.ajaxurl
如果您直接使用我的代码而不进行调整。
WordPress上的AJAX有点难上手,但一旦你开始使用,它就有意义了。使用开发人员工具,切换到Chrome上的"控制台"选项进行调试,看看你得到了什么信息(如果有的话)。