別のWebサービスにログインし、ユーザーに対していくつかのアクションを実行する可能性のあるWebアプリケーションがあります。
私はcodeigniterとjQueryを使用しています。特にajaxリクエストを処理するためにcodeigniterにコントローラーをセットアップしました。コントローラーは必要なことをすべて実行してから、echo
sjsonを実行します。
以下のajax呼び出しは、他のWebサービスのユーザー名とパスワードを取得し、それらを私のajaxコントローラーに投稿することになっています。コントローラは値を使用して、他のサービスへのログインを試みます(curlを使用)。json応答は、ログインが成功したかどうかを反映します。
私の問題は、ブラウザーがajaxコントローラーにリダイレクトされることがあるため、json応答がecho
ブラウザーに送信されることです。なぜ、いつこれが起こっているのか特定できません。その場合、success
関数は呼び出されません。
/* Verify login credentials
*
* @param username, password
* @param activityElement - element in which to place activity indicator
* @param location - location to refresh after success
* @return none
*/
function verify_login(username, password, activityElement, location)
{
$.ajax({
type: 'POST',
url: '<?=site_url('ajax/eval_login')?>',
data: { username: username, password: password },
beforeSend:function() {
window.savedHtml = $(activityElement).html();
$(activityElement).html('<div id="activity"></div><div class="text-center">Verifying </div>');
$('#activity').activity(); //neteye activity indicator plugin
},
success:function(data) {
data = $.parseJSON(data);
if (data.success) {
$(activityElement).html(window.savedHtml);
//fades in success message then performs function
set_message('Success!',function() {
alert(location);
window.location.href = "<?=site_url()?>/" + location;
});
} else {
$(activityElement).html(window.savedHtml);
set_message(data.error);
}
$('#activity').activity(false);
set_clicks();
},
error:function(){
set_message('<strong>Oops!</strong> Try that again in a few moments.</p>');
$('#activity').activity(false);
$(activityElement).html(window.savedHtml);
}
});
}
編集:私はかなり混乱しています。私はajaxリクエストが問題であるようには思えません...私には意味がありません
もう一度歩きます。
- リクエストは
.ajax
通話とともに送信されます - すべてが期待どおりに機能する場合があります(リクエストが返され、UIが更新されます)
- ブラウザ
http://yadayada.local/index.php/ajax/eval_login
は、適切なjson応答が表示されている場所に移動することがあります(下のスクリーンショットを参照してください)。適切なjson応答が表示されているのは興味深いことです。ブラウザが単にリダイレクトされた場合、$_POST
空になるため出力はありません...