首次尝试从$ .post调用undefined返回数据

时间:2013-08-11 14:17:37

标签: jquery ajax

我需要将jquery $ .post调用返回的数据存储在名为result的变量中。 下面的代码工作,除了第一次点击result返回未定义... 在第二次单击它会按预期返回php文件中的数据。 感谢。

$('a').on('click',function(){
  var cv = $(this).data('cv');
  var url= '_php/myphp.php';
  $.post(url,{contentVar:cv},function(data)
  {
    result = data
    return result;    
    });
    alert(result);
});

3 个答案:

答案 0 :(得分:1)

您应该将结果用作全局变量。

全局变量将允许您使用范围之外的变量:

var result;
$(function(){
    $('a').on('click',function(){
      var cv = $(this).data('cv');
        var url= '/echo/json/';
      $.post(url,{contentVar:cv},function(data)
      {
        result = data;
        //you don't need any return, its callback function 
      }).done(function(){
          alert(result);
      });

    });
});

您可以找到有关以下内容的更多信息: http://snook.ca/archives/javascript/global_variable

答案 1 :(得分:1)

通过使用.done()方法,您在等待AJAX​​调用以获得成功响应,然后提醒结果。

$('a').on('click',function(){
  var cv = $(this).data('cv');
  var url= '_php/myphp.php';
  $.post(url,{contentVar:cv},function(data) {
    result = data;
    return result;    
  }).done(function() {
      alert(result);
  });
});

答案 2 :(得分:0)

试试吧,

var result=null;// initially initialize this variable
$('a').on('click',function(e){
   e.preventDefault();// use this line to prevent its default behaviour
   var cv = $(this).data('cv');
   var url= '_php/myphp.php';
   $.post(url,{contentVar:cv},function(data)
   {
      result = data;
      alert(result);// first alert
      return result;    
   });
   alert(result);// its global now, check this too
});

如果这不能解决,请使用$.ajax()async:false选项。同步拨打Ajax code,以便初始化result variable,然后在result之后获得Ajax call