2012-11-30 50 views
6

我想使用函数来获取ajax调用的值。但值总是返回为未定义。返回值只有1或0。如何从ajax调用中获取返回值?

这里是我的代码:

$(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/' 
}); 
} 
+3

'ajax'中的'a'代表异步... :)所以您需要根据您的成功处理程序中的结果执行操作 –

+0

您是否也可以提供PHP /脚本?你也检查过你的PHP /脚本实际上是否获得了你传递的变量? –

+0

对于请求还有'async:false'。我不会使用它:p –

回答

20

它是异步的,所以你必须等待ajax调用才能获取数据,然后才能发出警报。

$(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/' 
    }); 
}​ 
+0

从来没有想过要返回一个被缓存的对象,+1。通常情况下,我只是通过回调。 –

+1

@JanDvorak - 谢谢,我以前总是使用回调函数,但只是返回延迟对象的结果,完成失败并始终直接执行,并使我的观点更容易。 – adeneo

+0

@adeneo很酷,谢谢! –

1

此加入AJAX选项:

dataType: "json", 

,并在你的操作方法使用

return Json(dataObject, JsonRequestBehavior.AllowGet); 

您可以通过返回Ajax调用和使用done(),像这样做,很容易。

return result; 
在阿贾克斯的成功处理程序

不是check_product回报。将另一个函数(可能是匿名)传递给check_product并调用ajax成功。