2

別のWebサービスにログインし、ユーザーに対していくつかのアクションを実行する可能性のあるWebアプリケーションがあります。

私はcodeigniterとjQueryを使用しています。特にajaxリクエストを処理するためにcodeigniterにコントローラーをセットアップしました。コントローラーは必要なことをすべて実行してから、echosjsonを実行します。

以下の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リクエストが問題であるようには思えません...私には意味がありません

もう一度歩きます。

  1. リクエストは.ajax通話とともに送信されます
  2. すべてが期待どおりに機能する場合があります(リクエストが返され、UIが更新されます)
  3. ブラウザhttp://yadayada.local/index.php/ajax/eval_loginは、適切なjson応答が表示されている場所に移動することがあります(下のスクリーンショットを参照してください)。適切なjson応答が表示されているのは興味深いことです。ブラウザが単にリダイレクトされた場合、$_POST空になるため出力はありません...

スクリーンショット

4

3 に答える 3

2

問題は、何らかの理由でフォームアクションをajaxコントローラーに向けていて、たまevent.preventDefault()にしか機能していなかったことです。私がそれをしたなんて信じられない..私はずさんな論理のためにそれに値したと思う

于 2012-09-26T02:57:59.737 に答える
1

ブラウザのネットワークインスペクタを使用して、失敗したリクエストの1つに対する応答を確認します。これにより、アプリケーションの応答内の問題が明らかになる可能性があります。

@see http://docs.jquery.com/Ajax_Events "このイベントは、リクエストが成功した場合にのみ呼び出されます(サーバーからのエラー、データのエラーはありません)。"

したがって、これが失敗する原因は、応答コードまたは応答データのいずれかです。

于 2012-09-25T23:05:10.787 に答える
0

私はあなたがこの行を必要としないと思います:

data = $.parseJSON(data);

それなしで実行してみてください。

于 2012-09-25T23:07:36.263 に答える