0

情報を取得するために ajax 呼び出しを行うときに、「お待ちください...」というメッセージを表示しようとしています。基本的に、ユーザーは検索語を入力して検索を実行し、ページが ajax 呼び出しを実行している間は「お待ちください...」と表示し、終了したら非表示にします。

jsp ページに次のような div があります。

<div id="modalWindow">Please Wait...</div>

私のjQueryは次のようになります。

jQuery('#modalWindow').css({
    'text-align' : 'center',
    'font-size' : '20px'
}).hide();  //this is called when the page initially loads

jQuery('#modalWindow').show();    //I call this in the function that does the Ajax call

jQuery('#modalWindow').hide();    //I call this once the Ajax is done.

これは私の Ajax 呼び出し全体です。

jQuery.ajax(
{
    url : urlContext + "/getItems.html",
    data :
    {
        txtItemReference : txtItemReference
    },
    dataType : "json",
    cache : false,
    async : false,
    timeout : 100000,
    success : function(jsonResponse)
    {
        if ( jsonResponse instanceof Object)
        {
            if (jQuery.isEmptyObject(jsonResponse))
            {
                createLocationDisplayPanel(false);
                createSimilarItemsPanel(false);
            }
            else if (jsonResponse['Locations'] != undefined)
            {
                responseArray = new Array();
                arrayStart = 0;
                intPage = 1;

                if (jsonResponse['Locations'].length <= 20)
                {
                    for (var x = arrayStart; x < jsonResponse['Locations'].length; x++)
                    {
                        responseArray[x] = jsonResponse['Locations'][x];
                    }
                }

                else
                {
                    responseArray = new Array();

                    for (var x = arrayStart; x < (20 * intPage); x++)
                    {
                        responseArray[x] = jsonResponse['Locations'][x];
                    }
                }

                createLocationDisplayPanel(jsonResponse, responseArray, txtItemReference, urlContext, callback);
            }
            else
            {
                if (jsonResponse['Items'].length <= 20)
                {
                    for (var x = arrayStart; x < jsonResponse['Items'].length; x++)
                    {
                        responseArray[x] = jsonResponse['Items'][x];
                    }
                }

                else
                {
                    for (var x = arrayStart; x < (20 * intPage); x++)
                    {
                        responseArray[x] = jsonResponse['Items'][x];
                    }
                }

                createSimilarItemsPanel(jsonResponse, responseArray, txtItemReference, urlContext, callback);
            }
            if (callback != undefined)
            {
                callback();
            }
        }
        else
        {
            alertLogout(document.URL);
        }
    },
    error : function(jsonResponse)
    {
        if (jsonResponse.hasOwnProperty('ERROR'))
        {
            alertError("There was no response from the server.");
        }
    }
});

これは、デスクトップの Firefox と Android の Firefox で完全に機能します。しかし、私が試したすべての Android ブラウザーで、「お待ちください...」というテキストが表示されず、イライラしています。show() および hide() 関数を Android ブラウザーで動作させるための回避策を教えてください。ありがとう。

4

2 に答える 2

0

その時点でjQueryがロードされているかどうかを確認しましたか? これをスクリプトの前に記述します。

if (typeof jQuery == 'undefined') {  
    alert('jQuery is not loaded'); 
}

スクリプトを組み合わせるか、必要な順序で確実にロードされるようにする方法を見つける必要がある場合があります。

于 2013-01-30T18:56:37.590 に答える
0

問題は Ajax 呼び出しの async プロパティにあることがわかりました。

jQuery.ajax(
{
    url : urlContext + "/getItems.html",
    data :
    {
        txtItemReference : txtItemReference
    },
    dataType : "json",
    cache : false,
    async : true,   //was false before
    timeout : 100000,
    success : function(jsonResponse)
    {
        if ( jsonResponse instanceof Object)
        {
            if (jQuery.isEmptyObject(jsonResponse))
            {
                createLocationDisplayPanel(false);
                createSimilarItemsPanel(false);
            }
            else if (jsonResponse['Locations'] != undefined)
            {
                responseArray = new Array();
                arrayStart = 0;
                intPage = 1;

                if (jsonResponse['Locations'].length <= 20)
                {
                    for (var x = arrayStart; x < jsonResponse['Locations'].length; x++)
                    {
                        responseArray[x] = jsonResponse['Locations'][x];
                    }
                }

                else
                {
                    responseArray = new Array();

                    for (var x = arrayStart; x < (20 * intPage); x++)
                    {
                        responseArray[x] = jsonResponse['Locations'][x];
                    }
                }

                createLocationDisplayPanel(jsonResponse, responseArray, txtItemReference, urlContext, callback);
            }
            else
            {
                if (jsonResponse['Items'].length <= 20)
                {
                    for (var x = arrayStart; x < jsonResponse['Items'].length; x++)
                    {
                        responseArray[x] = jsonResponse['Items'][x];
                    }
                }

                else
                {
                    for (var x = arrayStart; x < (20 * intPage); x++)
                    {
                        responseArray[x] = jsonResponse['Items'][x];
                    }
                }

                createSimilarItemsPanel(jsonResponse, responseArray, txtItemReference, urlContext, callback);
            }
            if (callback != undefined)
            {
                callback();
            }
        }
        else
        {
            alertLogout(document.URL);
        }
    },
    error : function(jsonResponse)
    {
        if (jsonResponse.hasOwnProperty('ERROR'))
        {
            alertError("There was no response from the server.");
        }
    }
});

それを変更すると、表示と非表示が Android で機能するようになりました。助けてくれてありがとう。

于 2013-01-30T20:03:27.780 に答える