2014-09-10 27 views
0

我正在尝试在Wordpress中的控制面板上刷新小部件。如何使用AJAX在Wordpress上正确刷新数据

我的插件是用PHP编写的,但我试图添加Jquery/AJAX来刷新每个小部件,当做出一些更改时。

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下载新文件,屏幕上就不会显示新内容。

谢谢!

回答

1

您的ajax回调函数为空。选择你想把你的ajax输出到的元素,然后将其innerhtml设置为该代码。

$.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'); 

此外,你应该使用随机数来验证其授权的Ajax请求。在你的php函数结束时,不要忘记死();

如需全面了解,请选择http://codex.wordpress.org/AJAX_in_Plugins

1

好的,首先,远程设置您的脚本。下面是一个我做了演示:

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上切换到“控制台”选项来进行调试,并查看您获得的信息(如果有的话)。