2017-06-20 120 views
-2

我正在用Jquery,AJAX,PHP和JSON开发一个会话系统。AJAX在调用后返回undefined变量

这是我的通用AJAX功能:

function ajaxConn(incomingUrl,incomingData) 
    { 
    var returnValue; 
    $.ajax({ 
     url:'backend/'+incomingUrl, 
     method:'POST', 
     data: JSON.stringify(incomingData), 
     contentType: "application/json; charset=UTF-8" 
    }).done(function(response){ 
      returnValue = response.resp; 
    }); 
    console.log(returnValue); 
    } 

这是函数的调用和结果的存储使用。可变数据具有先前被过滤和验证的输入值。

var data = {user:user,pass:pass}; 
var answer = ajaxConn('core_files/startSession.php',data); 
console.log(answer); 

这是我的PHP代码

require 'connection.php'; 
mysqli_set_charset($conn,"utf8"); 
header('Access-Control-Allow-Origin: *'); 
header('Content-Type: application/json'); 
$data = json_decode(file_get_contents('php://input'), true); 
$user = mysqli_real_escape_string($conn,$data["user"]); 
$pass = mysqli_real_escape_string($conn,$data["pass"]); 

$response = array(); 

页眉很多验证PHP后返回根据会议情况的一句话: 它可以返回

$response["resp"] = 'N'; 
echo json_encode($response); 

的错误会议或

$response["resp"] = 'Y'; 
echo json_encode($response); 

成功会话。

问题在于价值回报,如果我在0123.里面调用AJAX,它会从PHP返回正确的单词。但是,如果我从AJAX调用中退出,并且我尝试从funcion中执行相同的操作,它将返回未定义的状态。其实,在函数的返回返回我不确定也一样,

ajaxConn(); 

之外,我做错了

+0

Ajax是异步的。所以即使你使用'='符号,这并不意味着你会得到一个结果。 $ .deferer会帮助你 – SouXin

+0

不要这样做,你在ajar请求完成之前打印变量,这就是为什么它是未定义的。将console.log放入函数中,您将看到结果。如果你想返回值只有一个方法,使ajax请求同步。但我不建议这样做。 –

+0

对于它的价值,您的ajaxConn应该可能接受第三个param,这是一个成功调用的回调函数。我不会亲自使用它。它会限制你第一次遇到边缘情况。 – mkaatman

回答

0

console.log.done里面是什么。您的当前console.log在ajax请求完成之前立即运行,并且该值尚未定义。