0

私は登録フォームを開発してきましたが、ゆっくりと、しかし確実に、その過程でいくつかのjavascriptとjqueryを学び、それに関する私の知識をさらにサポートしています. 問題が発生しましたが、問題は AJAX 要求からの応答を取得できないことです。

私のAJAXリクエストは別の機能にあり、複数の目的があります。デバッグ目的でコードに alert(); を入れました。

function validate_input ( input, type ) {
    $.ajax({
            type:'post',
            url: 'ajax_request.php',
            data: "type=" + type + "&input=" + input,
            success: function( response ) {
            if( response == "true" || response == "false" ) {
                alert( "working" );
                console.log(response);
                return response;
            } else {
                alert( "AJAX/jQuery Error" );
                alert( "Reponse !== true or false" );
            }
        }
    });
}

ajax_request.php ファイルがtrueまたはfalseを正しくエコーしていることを確認できますが、興味のある方はここでコーディングを行ってください。

if (!defined('BASEPATH') &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
exit('Direct Access to this file has been disabled.');

include('core/db.php');
$validateType = intval( $_POST['type'] );
$input = escape_string( $_POST['input'] );

if( $validateType == 1 ) // validate username
{
    echo ( user_exists( $input ) ? "true" : "false" );
} else if( $validateType == 2 ) // validate email
{ 
    echo "true"; // not coded yet
}

最後に、必要に応じて ( .blur() を使用して)関数を呼び出します。以下を参照してください。

var username_value = "Jake"; // for debugging purposes, var definitely contains something
validate_input( username_value, 1 );
alert( validate_input( username_value, 1 ) ); alerts "undefined"

これを引き起こしているコードの問題を誰かが見ることができるかどうか疑問に思っています.バリデータープラグインを使用することを提案しないでください。これは質問への回答ではありません.

ありがとう、

4

3 に答える 3

3

Ajax 呼び出しは非同期です。そのような応答を返すことはできません。ajax を使用して、応答を受信したときに呼び出されるコールバック関数を定義します。コードの実行は停止せず、続行する前に応答を待ちます。

したがって、成功関数内でやりたいことを何でもするか、そこから別の関数を呼び出す必要があります。

于 2012-11-13T13:26:12.753 に答える
1

ajax の「タイプ」は POST に設定されていますが、スクリプトは $_GET 配列のパラメーターをチェックしています。$_GET を $_POST に変更するか、ajax タイプを「get」に変更します。

于 2012-11-13T13:22:37.507 に答える
1
alert( validate_input( username_value, 1 ) ); 
alerts "undefined"

これはそのようには機能しません。まず、非同期 ajax 呼び出しを使用しています。

2番:

success: function( response ) {
            if( response == "true" || response == "false" ) {
                alert( "working" );
                console.log(response);
                return response;
            } else {
                alert( "AJAX/jQuery Error" );
                alert( "Reponse !== true or false" );
            }
        }

上記のコードでは、関数ではなく、成功ハンドラー関数に戻りvalidate_inputます。基本的に、応答はどこにも返されません。

したがって、代わりに、return response;応答で必要なことは何でもする必要があります。

success: function( response ) {
                if( response == "true" || response == "false" ) {
                    alert( "working" );
                    console.log(response);
                    alert(response);//here you do what you need.
                } else {
                    alert( "AJAX/jQuery Error" );
                    alert( "Reponse !== true or false" );
                }
            }

.get.post、背後.loadで使用するのと同じように機能します$.ajax

于 2012-11-13T13:32:29.667 に答える