

Ajaxの返り値を取得する方法をおしえてください。  
Submit時にAjaxでDBを見に見にいってその返り値によってエラーを表示するかそのまま進むかというものになります。  
（以下コード自体はいろいろ端折っております。）

[code]

    html    
    <form action="NEXTPATH"...>
       <input type="text" id="email">
       <input type="submit" id="submit" value="send">
    </form>
    <div id="error"></div>
    
[/code]

でもって、JSでは、

[code]

    $(function(){
        $("#submit").click(function(){
            function testajax() {
                return $.ajax({
                    type: 'get',
                    datatype: 'json',
                    url: 'api.php',
                });
            }
    
            var re = testajax().done(function(data){
                console.log(data['status']);
                if (data['status'] == 'OK' && data['message'] == false) {
                    return false;
                }
            });
    
            console.log(re);
            if (re == false) {
                $("#error").html('エラーです。');
            }
            return re;
        });
    });
    
[/code]

こういった感じです。api.phpからは単純にjson形式で値が返ってきます。

[code]

    {"status":"OK","message":true}
    
[/code]

Ajax自体はちゃんと動いていてjsonの値をとってこれられるのですが、testajax()という関数から想定した返り値が返ってこないといったところです。  
非同期なので実行順序が想定した通りに進まず、現時点ではconsole.log(re);のところが先に実行され[OBJECT
object]を返してきてその後にconsole.log(data['status']);が実行されております。またtestajax()からは、returnした値ではなく[Object
{readyState: 1}]というものが返ってきてしまいます。  
1\. Ajaxで通信して、返ってきた値を元に様々な判定をして、  
2\. 関数の返り値として値を返したい。  
というだけなのですが、なかなかうまく行きません。

[code]

    testajax().done(function(data){
    ....
    }
    
[/code]

この中では正常に動いているのですが、returnにfalseを返したい（または他の値でもいいと思う）ところですが、返らないので結果的にsubmitのアクションがfalseとtrueの制御ができないため進んでしまいます。

どなたか詳しい方おしえてください。  
よろしくお願いします。


CC BY-SA 3.0
2015-11-28T06:13:40.123
19395
2018-04-28T08:06:55.090
7154
question
javascript php json ajax
Ajaxの返り値を取得する


二度押しなどの対策などされてませんが良いのでしょうか？  
とりあえず、返却値にfalseを入れといて一旦キャンセル  
その後にjavascriptから送信してはどうでしょうか？  
で、なければ、あまりお勧めは出来ませんが  
`async:false`を使った方法でブラウザを止めるかですね。  
非同期通信で同期通信みたいなことをしているのでややこしいことになっているとは思います。

[code]

    $(function(){
        $("#submit").click(function(){
            function testajax() {
                return $.ajax({
                    type: 'get',
                    datatype: 'json',
                    url: 'api.php',
                });
            }
    
            var failed = function(res){
                $("#error").html('エラーです。');
            };
    
            testajax().done(function(data){
                if (data['status'] == 'OK' && data['message'] == false) {
                    failed(false);
                }else{
                    //フォーム送信
                    document.form.submit();
                }
            }).fail(failed);
    
            return false;
        });
    });
    
[/code]


CC BY-SA 3.0
2015-11-28T06:37:12.803
19400
2015-11-28T06:37:12.803
19395
answer


jQuery.ajax()の実行結果は、jQueryにてsuccess,errorの判定をしていますので、

[code]

    $.ajax({
       type: 'get',
       datatype: 'json',
       url: 'api.php',
       success: function(result){
         // レスポンスを受け取った後の処理。引数resultには受け取ったデータが入る。
       } 
    });
    
[/code]

このように successの箇所で実行後の内容、ないしは呼び出す関数を記載してください。


CC BY-SA 3.0
2015-11-28T07:57:55.810
19404
2015-11-28T07:57:55.810
5778
19395
answer


before  
`datatype: 'json',`

after  
`dataType: 'json',`


CC BY-SA 3.0
2018-04-28T08:06:55.090
43632
2018-04-28T08:06:55.090
28347
19395
answer