2016-10-14 12 views
0

私はAJAX要求を作成しました.AJAX要求が完了すると、ページがリダイレクトされます。それは応答を無視します。要求が応答なしで完了したときのAjax

私はリダイレクトする前にPOSTの送信が完了したことを確認しようとしています。私がオンラインで見つけたものはすべて、それが成功または失敗した後に何かを引き起こす方法を持っています。私はそれほど待たずにいたい。 POSTを送信して何かをするまで待機する方法はありますか?

$.ajax({ 
    data: "type=userLoginLog&username=" + username, //Post Username 
    url: environmentalVariables.support_api_address 
}); 
loginWithRefreshToken(refresh_token); 

答えて

1

いいえ、それが送信されましたを正確に知る方法はありません。 Ajaxから受け取る唯一の通知は、応答またはエラーが受信されたか、要求がタイムアウトしたときです。 「送信済み」通知はありません。

タイマーでリダイレクトを試してみてください(要求が送信されたことを確認する最短のタイミングを見つけようとしています)が、ちょっとしたハックで、ブラウザごとに簡単に変わる可能性があります。

Ajaxコールを受信したサーバーが、(まだ独自の処理を行っていなくても)即時応答を返すようにすると、次のような応答を受け取ったときにリダイレクトをトリガーできます。

サーバーが正しく実装されている場合は、レスポンスを取得するにはわずかな時間がかかります。


あなたも、上記の二つの方式を組み合わせて、(タイマーやAJAXの応答)完了最初のアクションにリダイレクトを引き起こす可能性:応答にし

function delay(x) { 
    return new Promise(function(resolve) { 
     setTimeout(resolve, x); 
    }); 
} 

var p = $.ajax({ 
    data: "type=userLoginLog&username=" + username, //Post Username 
    url: environmentalVariables.support_api_address 
}); 

// you will have to figure out what delay time is appropriate here 
$.when(p, delay(200)).then(function() { 
    loginWithRefreshToken(refresh_token); 
}) 
+0

これは私が心配していたことです。サーバーはPHPなので、レスポンスを返信して処理を続行するのは難しくなります。 – AndrewL

+0

@AndrewL - [レスポンスを送信後にphpを処理し続ける](http://stackoverflow.com/questions/15273570/continue-processing-php-after-sending-http-response)を参照してください。 – jfriend00

+0

ありがとうございました。私はあなたの2番目のソリューションを使用して、サーバーをすぐに応答するように変更すると思います。ありがとうございました。 – AndrewL

0
$.ajax({ 
    url: "post_url", 
    type: 'post', 
    data: dataObj, 
    datatype: 'application/json', 
    beforeSend: function() { 
     // do something 
    }, 
    complete: function() { 
     // do something 
    }, 
    success: function(response) { 
     window.location.href= "_success_page_url"; 
    }, 
    error: function(jqXMLHttpRequest, textStatus, errorThrown) { 
     window.location.href= "_error_page_url"; 
    } 
}); 
+0

、私はをレスポンスを待つことを望んでいません。 – AndrewL

+0

レスポンスを待つのはなぜですか? ajaxは非同期メソッドです。応答を気にしない場合は、後に他のメソッドを呼び出すことはできますが、応答データはありません。 –

+0

次の関数はページをリダイレクトします。したがって、AJAXが送信を完了していない場合、ブラウザはブラウザをキャンセルします。 – AndrewL

0
$.ajax({ 
    data: "type=userLoginLog&username=" + username, //Post Username 
    url: environmentalVariables.support_api_address 
}).done(function(){ 
    loginWithRefreshToken(refresh_token); 
}); 
関連する問題