我搜索了很多问题,但没有得到正确的答案。我已经从我的研究中了解到ajax调用是异步的以下函数,所以它将值传递给全局变量并返回但是我得到一个空白或未定义的值。我可以用$('#someid'来做).html作为回应或其他一些方法,但我不想实现它们。知道我在这里做错了什么
function SimpleAjax(form, postData, url)
{
var returnData;
var sendData;
if (form == "") {
sendData = postData;
}
else if (postData == "") {
sendData = $(form).serialize();
}
$.ajax({
type: 'POST',
url: url,
cache: false,
data: sendData,
success: function(data)
{
if (data != null || typeof data != 'undefined') {
returnData = data;
}
}
}).done(function(data) {
returnData = data;
});
return returnData;
}
答案 0 :(得分:4)
问题是return returnData;
在您成功或完成功能执行之前发生。正如你所说,它是异步的。但是,您的函数SimpleAjax正在同步运行。
因此它启动Ajax调用$.ajax({ ... });
,然后执行return returnData;
。
我所做的,不是使用全球性的,这只会让你头疼。但是传入一个函数来执行成功,而不是尝试返回结果。
像...一样的东西。
function SimpleAjax(form, postData, url, successCallback)
{
var returnData;
var sendData;
if (form == "") {
sendData = postData;
}
else if (postData == "") {
sendData = $(form).serialize();
}
$.ajax({
type: 'POST',
url: url,
cache: false,
data: sendData,
success: successCallback
});
}
//TODO: set your input parameters
SimpleAjax(form, postdata, url, function(data) {
alert(data);
});
答案 1 :(得分:0)
找到了答案,我认为.done会做魔法并在ajax完成后返回值,但它没有做.... 只是把这个代码 async:false,
在ajax中它会起作用
function SimpleAjax(form,postData,url)
{
var returnData;
var sendData;
if (form == "")
{
sendData=postData;
}
else if(postData=="")
{
sendData=$(form).serialize();
}
$.ajax({
type:'POST',
url: url,
cache: false,
data:sendData ,
async: false,
success: function(data)
{
if (data != null || typeof data!='undefined')
{
returnData= data;
}
}
});
return returnData;
}