我正在尝试从ajax调用中传递一个json对象,该变量将在另一个函数中使用。
问题是,如果我尝试console.log()
该变量($ aR),则返回“undefined”
以下是代码:
$aR = '';
// Submit Data to ncbi.
// Sends form's data to classController.php
function NCBI_submit_data()
{
$formData = $('#blastx_form').serialize();
$php_method = 'ncbi_request';
$finalData = $formData + "&php_method=" + $php_method;
$aR = ajaxReq('POST','../../classes/classController.php',$finalData,'json');
console.log($aR);
}
// General Ajax function
function ajaxReq($method,$url,$data,$dataType)
{
$.ajax({
type: $method,
url: $url,
async: 'false',
data: $data,
dataType: $dataType,
success: function(json, textStatus, jqXHR)
{
$aR = json;
},
error: function(jqXHR, textStatus, errorThrown)
{
console.log('Ajax call error: '+jqXHR.status+' '+errorThrown)
}
});
}
答案 0 :(得分:2)
以下是代码中$aR
的粗略时间表:
// initialized
$aR = '';
// set to `undefined`, since `ajaxReq` returns nothing
$aR = ajaxReq('POST','../../classes/classController.php',$finalData,'json');
// then, later, when the `ajax` call completes:
$aR = json;
console.log($aR); // would do something now
如果您需要对该值执行某些操作,请在success
处理程序
success: function(json, textStatus, jqXHR)
{
$aR = json;
doSomethingWith($aR);
},
或者使用$.ajax()
返回的AJAX对象:
function ajaxReq($method,$url,$data,$dataType)
{
return $.ajax({ ... });
}
// called as
ajaxReq('POST','../../classes/classController.php',$finalData,'json').done(
function(json) {
$aR = json;
// whatever else you want to do
}
);
答案 1 :(得分:1)
默认情况下,JQuery Ajax会进行异步调用。您尝试在从后端检索数据之前使用数据。在Ajax调用之后,JS解释器不会等待响应并将执行:
$aR = ajaxReq('POST', ....).
功能" ajaxReq"没有任何回报。所以," $ aR"值是"未定义"。
数据稍后将在"成功"检索响应后回调:
success: function(json, textStatus, jqXHR)
{
$aR = json;
},
回调"成功"将在稍后执行"异步"。
了解同步和异步请求之间的区别:
What is the difference between a synchronous and an asynchronous request? (async=true/false)