Javascript 如何从ajax调用中获取返回值?

Javascript 如何从ajax调用中获取返回值?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我想使用函数获取ajax调用的值。但该值始终返回为未定义。返回值仅为1或0 这是我的密码: $(function(){ $('#add_product').click(function(){ var i = $('#product_name').val(); param = 'product_name='+i; var value = check_product(param); alert(value); return fals

我想使用函数获取ajax调用的值。但该值始终返回为未定义。返回值仅为1或0

这是我的密码:

$(function(){ 
   $('#add_product').click(function(){ 
     var i = $('#product_name').val(); 
     param = 'product_name='+i; 
     var value = check_product(param); 
     alert(value); 
     return false; 
   }); 
});

function check_product(param){ 
  $.ajax({ 
    type : 'POST', 
    data : param, 
    url : baseurl+'cart/check_product_name/', 
    success : function(result){ 
      //alert(result); 
      return result; 
    } 
 });
}

我仍在努力让这一个工作。我现在得到的值显示为1或0。我现在要做的是如何在if语句中实现它。我想要这样的东西。如果val=0,则返回true;否则返回false。我不确定我是否正确使用了ajax功能。但是如果你能给我一个更好的方式,我会很感激的

$(function(){ 
       $('#add_product').click(function(){ 
         var i = $('#product_name').val(); 
         param = 'product_name='+i; 
         check_product(param).done(function(value) {
        var val = value; //waits until ajax is completed
         });
         if(val == 0){
            return true;
         } else{
            return false;
         }
       }); 
    });

function check_product(param){ 
  return $.ajax({ 
    type : 'POST', 
    data : param, 
    url : baseurl+'cart/check_product_name/'
 });
}

它是异步的,因此您必须等待ajax调用返回数据,然后才能发出警报。通过返回ajax调用并使用
done()
,您可以轻松做到这一点,如下所示:

$(function() {
    $('#add_product').click(function() {
        var i   = $('#product_name').val(),
            par = 'product_name=' + i;

        check_product(par).done(function(value) {
            alert(value); //waits until ajax is completed
        });

        return false;
    });
});

function check_product(param) {
    return $.ajax({
        type : 'POST',
        data : param,
        url  : baseurl + 'cart/check_product_name/'
    });
}​

将此添加到ajax选项:

dataType: "json",
和使用

return Json(dataObject, JsonRequestBehavior.AllowGet);
在你的行动方法中

你的


在ajax的成功处理程序中,没有返回
check\u product
。将另一个函数(可能是匿名的)传递到
检查产品
并调用ajax成功。

ajax中的“a”代表异步…:)因此您需要根据成功处理中的结果执行操作。您也可以提供PHP/脚本吗?您还检查了您的PHP/script是否实际获取了您要传递的变量吗?请求中还有
async:false
。不过我不会用这个:我从没想过返回一个不同的对象,+1。通常情况下,我只会通过回调。@JanDvorak-谢谢,过去我自己总是使用回调,但只要返回延迟对象,就会暴露出已完成、失败并且总是直接进行,在我看来,这会让事情变得容易得多。@adeneo这很酷,谢谢+我一直在寻找一种方法来获得一个可用的ajax方法,如果我们使用一个第一类函数作为回调呢?这将是如何构造的?没关系,我算出了,我只是将其作为参数的一部分传递
函数makeAjaxRequest(requestType、url、data、onSuccess、onFail){…
return result;