简体   繁体   English

用jquery / ajax显示加载图像

[英]display loading image with jquery/ajax

I am trying to display a spinning image while ajax call is being completed. 我正在尝试在ajax调用完成时显示旋转的图像。 I am using the following jsp and jquery code yet it is not working. 我正在使用以下jsp和jquery代码,但是它不起作用。 Any help will be appreciated jsp: 任何帮助将不胜感激jsp:

<div class="tab-content" id="rdfTabs">
            <div id="data">
                <p>Please enter dataset URL or absolute file location (e.g: c:\data\dbpedia.rdf)</p>
                <table width="100%">
                    <tr>
                        <td colspan="2"><input name="txtDataSource" id="txtDataSource" type="text" class="textbox"/>
                        <input type="button" value="Analyse File"
                            name="btnAnalyseFile" id="btnAnalyseFile" class="btn-blue" /></td>

                    </tr>

                </table>
                **<div id="loadingImage" style="display:none">
                    <img src="http://preloaders.net/preloaders/287/Filling%20broken%20ring.gif">
                </div>**
                <p id="presult">
            </div>

and here is the jquery code 这是jQuery代码

$(document).ready(function()
        {
            $("#presult").hide();
            $("#btnAnalyseFile").click(
                    function(e)
                    {
                        **$("#loadingImage").show();**
                        $.ajax({
                            url : 'CreatePatternServlet',
                            type : 'POST',
                            dataType : 'json',
                            data : $("#formCreatePattern").serialize(),
                            success : function(data)
                            {   
                                if(data.analyseResult==true){
                                var predicates = {};
                                var objectList = {};
                                var ddlSubject = $('#ddlSubject');
                                var ddlPredicate = $('#ddlPredicate');
                                var ddlObject = $('#ddlObject');
                                var ddlClass = $('#ddlClass');
                                $.each(data.Subjects, function(key, value)
                                {
                                    ddlSubject.append($('<option></option>')
                                            .val(value).html(key));
                                });
                                $.each(data.Classes, function(key, value)
                                {
                                    ddlClass.append($('<option></option>')
                                            .val(value).html(key));

                                });
                                $.each(data.Predicates, function(key, value)
                                {
                                    ddlPredicate.append($('<option></option>')
                                            .val(value).html(key));
                                });
                                $.each(data.Objects, function(key, value)
                                        {

                                            ddlObject.append($('<option></option>')
                                                    .val(value).html(key));
                                        });
                                $('#ddlSubject').filterByText(
                                        $('#txtSearchSubject'));
                                $('#ddlPredicate').filterByText(
                                        $('#txtSearchPredicate'));
                                $('#ddlObject').filterByText(
                                        $('#txtSearchObject'));
                                $('#ddlClass').filterByText(
                                        $('#txtSearchClass'));

                                $("#presult").html("Data uploaded successfully");
                                $("#presult").css("color","green");
                                $("#presult").fadeIn(500);
                                }
                                else{
                                    $("#presult").html("Upload failed, please check file path or URL. Server returned error: "+data.result);
                                    $("#presult").css("color","red");
                                    $("#presult").fadeIn(500);
                                }

                            }
                        });
                        **$('#loadingImage').hide();**
                        return false;
                    });
        });

Problem is that your ajax function is asynchronous, so you are showing the loader, firing the ajax and inmediately hiding the loader, without waiting for the request to end. 问题是您的ajax函数是异步的,因此您正在显示加载程序,启动ajax并立即隐藏加载程序,而无需等待请求结束。

Easy fix is putting the $('#loadingImage').hide(); 简单的解决方法是将$('#loadingImage').hide(); inside the success function, but would be better to add a done function in case it fails 在成功函数中,但是最好添加完成函数以防失败

$("#btnAnalyseFile").click(function() etc...

shoudn't be 不应该

$("#btnAnalyseFile").on("click", function() { etc...

?

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

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