繁体   English   中英

如何使用Ajax刷新PHP文件本身?

[英]How can I refresh a PHP file with itself using Ajax?

好的,我正在尝试使用ajax和选择框为帖子创建过滤器系统。 我能够从选择框中获取值没问题。 但是我的问题是,当我尝试在PHP文件中包含选定的值时,它什么也没做。 我有一个名为public_wall.php的文件。 该文件包含PHP,Javascript和HTML。 每当用户选择其他过滤器选项时,如何刷新此div? 基本上,我需要将选定的值传递到我的public_wall.php文件中,然后将其插入获取相同文件中帖子的PHP函数,然后刷新该文件以显示过滤的结果。 这是我的Javascript代码。

$("#postRatings").on("click", function(e) {
selectedRatingFilter = $("#postRatings option:selected").val();
    var dataString = "timeFilter="+selectedRatingFilter;    
    jQuery.ajax({
        type: "POST",
        url: site_url+"public_wall.php",
        data: dataString,
        dataType: "json",
        cache: false,
        success: function(response){
             hideSpinner();
             jQuery('#postsPagingDiv').remove();
             jQuery('#wsc_midbox').html(jQuery(response.htmls).fadeIn(400));
             setpost_ids(response.all_post_id);
             jQuery('#paging_in_process').val(0);   
        }
    });
});

当dataType设置为“ json”时,将不会发生任何事情。 但是,当将其设置为html时,它将打印一些javascript代码。 请帮忙。 该PHP文件太大,无法在此处包含,但它基本上包含PHP,HTML和Javascript以及一些执行SQL查询的PHP函数。 为我的设置实现过滤器机制的最佳方法是什么?

在public_wall.php文件上,我想像这样获取值:

$ratingFilter = isset($_REQUEST['timeFilter']) ? intval($_REQUEST['timeFilter']) : 0;

然后将其插入到获取public-wall.php文件中帖子的PHP函数中,这样我就可以基于所选值过滤帖子。 最后,我想用新结果刷新public_wall.php文件。 我希望这是有道理的。 请帮忙。

这是我将dataType设置为“ html”时的输出

    <script>
        function refreshPosts() {/* only posts comments likes and count updated. */ 
            var posts = jQuery("#all_post_id").val();   
            var arrays = posts.split(',');
            var dataString = "postids="+posts;



   jQuery.ajax({
        type: "POST",
        url: site_url+"includes/update_wall.php",
        data: dataString,
        dataType: "json",
        cache: false,
        success: function(response) {
            var x = response;
            //############ skip posts whose comments are being read by users
            var ExemptedPostsIDs = jQuery("#exemptedPostsID").val();


            var ExemptedArray    = ExemptedPostsIDs.split(',');
            ExemptedArray = ExemptedArray.sort();
            //////////////
            for (i=0; i<arrays.length; i++) {
                var val = 'row'+arrays[i];
                if(x[val]) {
                    if(!inArray(arrays[i], ExemptedArray))                                      
                    jQuery("#ajax_wall_"+arrays[i]).html(x[val]);
                } else {
                    jQuery('#PostBoxID'+arrays[i]).parent().fadeOut(500);
                }
            }
        }
    });
}
function inArray(needle, haystack) {
    var length = haystack.length;
    for (var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;

}
function refreshWall() {/* loads new posts real time */
    var posts = jQuery("#all_post_id").val();   
    var pageUsing = jQuery('#pageUsing').val();
    var dataString = "update_posts=1&postids="+posts+'&pagex='+pageUsing;
    jQuery.ajax({
        type: "POST",
        url: site_url+"public_wall.php",
        data: dataString,
        dataType: "json",
        cache: false,
                success: function(response) {
                    if(response.all_post_id) {
                        jQuery('#wsc_midbox').prepend(jQuery(response.htmls).fadeIn(400));
                        setpost_ids(response.all_post_id);
                    }
                }
            });
        }
    </script>

我建议您将带有select元素的表单和所有JavaScript放在外部框架上。

通过ajax,仅将结果加载到下面的单独的DIVision中。

当您将Ajax响应放入div时,其中的任何JavaScript都不会执行。

为了使用Ajax获得最佳吞吐量,您应该考虑通过Ajax加载json响应并在客户端创建HTML元素。 这样,将其他变量与相同的请求/响应一起从服务器端拉到前端JS变得容易得多。

但这在后端具有模板引擎时会变得有些困难。 您仍然可以通过json值发送HTML内容,因此也可以轻松地传递“ all_post_id”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM