0

我需要将从 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);
});
4

3 回答 3

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

于 2013-08-11T14:19:26.417 回答
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);
  });
});
于 2013-08-11T14:25:28.597 回答
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.

于 2013-08-11T14:20:20.277 回答