我正在尝试制作一个简单的可重用的ajax函数。在谷歌上花了几个小时,并试着自己,我别无选择,只能寻求帮助。
我正在从Javascript获得“未定义”警报。当我不使用函数方法时,它工作正常。以下是它的代码......
$("#formloginadmin").submit(function (){
var url = "ajax/ajax_login_admin.php";
var txtemail = $("#txtemail").val();
var txtpass = $("#txtpass").val();
var formdata = $('#formloginadmin').serialize();
var revel = true;
txtemail = $.trim(txtemail);
txtpass = $.trim(txtpass);
response = ajax_post(url, formdata);
alert(response);
return false;
});
function ajax_post(url, formdata){
$.post(url, formdata, function (data){
return data;
});
}
答案 0 :(得分:0)
正确的方法是
ajax_post(url,formdata).done(function(response){ 警报(响应); });
您访问ajax请求响应的方式不正确。看看这个链接: jQuery Ajax POST example with PHP
希望你明白了。
对于您的问题,为什么要获得undefined
:
response = ajax_post(url, formdata);
是一个ajax调用,因此在返回该ajax调用之前会执行下一行alert(response);
。因为调用ajax_post
是异步的。
答案 1 :(得分:0)
function ajax_post(url, formdata){
$.post(url, formdata, function (data){
return data;
});
}
这是一个内部调用$.post
的函数。 $.post
是一个异步函数,这意味着它不会返回其结果,但会在稍后通知您结果存在。这就是回调函数的作用。在回调函数(最内层函数)中,您将data
作为参数并从回调函数返回。
所以在异步时间轴的某个地方,有一个函数可以返回一个不再执行的函数。所以这不起作用。
异步函数立即返回,稍后会通知您结果。所以你不能像同步事件那样返回数据。 Instaed你真的需要使用异步模式并使用回调。
答案 2 :(得分:0)
正如其他人已经说过的那样,$.post
是异步,这意味着你无法从中获得返回值。
您可以做的是返回promise以稍后发送返回值 。很简单,$.post
的返回值就是这样一个承诺:
function ajax_post(url, formdata){
return $.post(url, formdata);
}
(但请注意,您现在有一个函数除了使用相同的参数调用$.post
之外什么都不做!)
一旦你得到了承诺,那么当该承诺已解决时,你就可以触发回调:
ajax_post(url, formdata).done(function(response) {
alert(response);
});