2012-03-22 10 views
2

GETリクエストを処理して結果をレンダリングするのに数秒かかる場合があります。私は、「処理中です」という一時的なページを表示したいと考えています。これどうやってするの?私は私のページへのリンクを制御することはできませんGETリクエストの処理中に一時的なページを表示する

UPDATE

。第三者が自分のページにある私へのリンクです。彼らはそれをクリックすると私はいくつかのものを実行し、結果を表示します。私は彼らが私が表示するページ上の何かをクリックする必要はありません。ユーザーが「doesnの - ユーザーが

  • 私のウェブサイトは「処理要求」メッセージを表示するサードパーティのWebサイト上にある私のウェブサイトへのリンクをクリック

    1. 理想的には、私は次の希望します何もクリックしないで、待ってください。

    2. 数秒後に結果が表示されます。

    すべてのユーザーは、リンクを一度クリックして結果を待つだけでした。

    jQueryのようなものにはかなり新しいので、いくつかのサンプルコードは大いにありがたく思っています。

  • 答えて

    2

    は、メッセージを表示するには、jQueryのを使用してください。

    処理メッセージ/画像を含むページに非表示のdivタグを配置します。

    ボタンをクリックしてGETリクエストを送信すると、onclickイベントがボタンに表示され、divタグが表示されます。ビューの処理が完了すると、ページがリロードされ、ターゲットページが表示されます。

    AJAXを使用してビューを呼び出す場合は、ajaxStartイベントとajaxCompleteイベントにdivの表示/非表示を設定できます。

    EDIT:第三者からページが呼び出されるため、問題は少し複雑になります。私はあなたがデータなしでページをロードし、ページがロードされると、データを取得するためのAJAX GETリクエストを行うことをお勧めします。

    次のようにあなたが行うことができます:

    は、Progressメッセージ/画像をページに隠されたのdivタグを追加します。

    <div id="progress">Please wait while the page is loading.</div> 
    

    次に、ページにAJAX GET呼び出しを追加:

    $(document).ready(function() { 
    
        //Attach the ajaxStart and ajaxComplete event to the div 
        $('#progress').ajaxStart(function() { 
         $(this).show(); 
        }); 
    
        $('#progress').ajaxComplete(function() { 
         $(this).hide(); 
        }); 
    
        //Perform the AJAX get 
        $.get('/your_view/', function(data) { 
        //Do whatever you want with the data here 
        }); 
    }); 
    

    上記のコードはテストされていないが、それはあなたのアイデアを与えるだろう。

    UPDATE

    私はあなたのビューからJSONオブジェクトまたは類似を返すことを示唆している:

    companies = Company.objects.filter(name__istartswith=companyname) 
    results = [{'value': company.name, 'id':company.id} for company in companies ] 
    json = simplejson.dumps(results) 
    return HttpResponse(json, mimetype='application/json') 
    

    また、jQueryの中のget()の代わりにgetJSON()メソッドを使用することができます。

    +0

    ありがとうございます。これが私の上記の要件を満たしていれば(1,2,3の手順を参照してください)、いくつかのサンプルコードを与えることができます。 – TonyM

    +0

    上記のEDITをご覧ください – Mikael

    +0

    ありがとうございます。 AJAXを取得するには、Ajaxを有効にするために既存のDjangoビューを変更する必要がありますか?私はデータが私のビューが返すすべてのHTMLページを含むと推定しますか?これを表示できますか? – TonyM

    1

    非常に単純な例:ビューは、結果を返すのを待っている間

    <script> 
    showProcessingMessage = function() { 
    
        $("body").append('<div id="style_me_as_message">processing request</div>'); 
    
    } 
    
    $("body").on('click', "a.slow", showProcessingMessage); 
    
    </script> 
    <a class="slow" href="/slow-response-page/">show slow page</a> 
    
    +0

    ありがとうございますが、自分のページへのリンクを制御できません。彼らは自分のページにあるリンクです。私は彼らが私が表示するページ上の何かをクリックする必要はありません。 – TonyM