如何使用Ajax自行刷新PHP文件?

时间:2017-04-25 19:21:38

标签: javascript php jquery 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;

然后将其插入到PHP函数中,该函数也会获取public_wall.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>

1 个答案:

答案 0 :(得分:0)

我建议您使用select元素和外框上的任何JavaScript保留表单。

通过ajax,只将结果加载到低于该值的单独DIVision。

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

为了获得Ajax的最佳吞吐量,您应该考虑通过Ajax加载json响应并在客户端创建HTML元素。这样,从服务器端向前端JS提取其他变量以及相同的请求/响应变得更加容易。

但是当你在后端使用模板引擎时,这会变得有点困难。您仍然可以以json值发送HTML内容,这样您就可以轻松地传递&#34; all_post_id&#34;以及..