我一直在开发一个注册表格,但我一直在学习一些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"
我只是想知道是否有人可以看到导致此问题的代码有任何问题,请不要建议我使用验证器插件,这不是问题的答案。
谢谢,
答案 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
的方式相同