0

我一直在开发一个注册表单,而且我一直在缓慢但肯定地学习一些 javascript 和 jquery,以进一步支持我对这一切的了解。但是我遇到了一个问题,问题是我无法从 AJAX 请求中获得响应。

我的 AJAX 请求在一个单独的函数中,我有多种用途。我已将 alert();'s 放入代码中以进行调试。

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 文件正确地回显,但是,对于那些感兴趣的人来说,这里是编码。

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 调用。

第二:

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 回答