使用AJAX Post的响应

时间:2012-11-13 13:13:03

标签: php javascript jquery ajax

我一直在开发一个注册表格,但我一直在学习一些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"

我只是想知道是否有人可以看到导致此问题的代码有任何问题,请不要建议我使用验证器插件,这不是问题的答案。

谢谢,

3 个答案:

答案 0 :(得分:3)

Ajax调用是异步的,你不能像那样返回响应。使用ajax定义一个回调函数,该函数在收到响应时调用。在继续之前,代码执行不会停止并等待响应。

所以你需要在成功函数中做任何你想做的事情,或者从那里调用另一个函数。

答案 1 :(得分:1)

ajax“type”设置为POST,但是你的脚本正在检查$ _GET数组中的参数。将$ _GET更改为$ _POST或将ajax类型更改为“get”。

答案 2 :(得分:1)

alert( validate_input( username_value, 1 ) ); 
alerts "undefined"

这不会那样。首先 - 您正在使用asynchronouse 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" );
            }
        }

在上面的代码中返回成功处理函数的belogns,而不是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的方式相同