2013-10-28 28 views
0

我在jQuery中工作,我有一个变量,我声明为全局函数,当我提醒它时,它给了我正确的结果,但现在我想访问相同的在另一个函数中变量,并在另一个函数中提醒它它给我空结果意味着我不能在那里访问它。我知道一个变量的范围,但为了克服它,我把变量解释为全局的,但我仍然无法访问它。jQuery访问全局变量的值从一个函数到另一个

这是我的第一个功能:

var employee_email = ''; 
function showCustomer() 
{ 
// fire off the request to ajax_stufflist.php 
request = $.ajax({ 
    url: "ajax_stufflist.php?"+url, 
    type: "post", 
    success: function(data){ 
     if(data != ''){ 
    var response = $(data).find("#gmp_stuff").html(); 
    employee_email = $(data).find(".EMP_EMAIL>span").html(); 
    //alert(employee_email); 
    $("#user_responses").html(response); 
     $(function() { 
      $("#user_responses").dialog({ 
       dialogClass:'transparent', 
       resizable: false, 
       draggable: false, 
       modal: true, 

       width: 1000, 
       autoOpen: false, 
       overlay: { opacity: 0 } 
      }); 

    $('#user_responses').dialog('open'); 
    $('#user_responses').css('display',''); 


    }); 
     } 
    }, 
    error:function(){ 
     alert("failure"); 
     $("#user_responses").html('error occured'); 
    } 
    }); 

} 

在这个函数的变量employee_email被上面的函数decleared,我想只是旁边访问与其他函数值相同的变量在同一个脚本标签。

function sendEmail(){ 
alert(employee_email); 
request = $.ajax({ 
    url: "send_email.php?"+employee_email , 
    type: "post", 
    success: function(data){ 
    $("#email_responses").html(); 


    }, 
    error:function(){ 
     alert("failure"); 
     $("#email_responses").html('error occured'); 
    } 
    }); 
} 

请告诉我它有什么问题。预先感谢任何帮助。

+0

well ajax is ASYNC ..在sendEmail函数中获取变量的唯一方法是在第一个函数的ajax完成中调用它。和是**你不需要准备功能内功能回调** – bipen

+0

对不起,我不明白我没有得到的点 –

回答

1

这不是范围问题。如果是这样的话,你的控制台就会出现错误。但是你得到一个空的结果,因为AJAX调用还没有完成,或者由于那里的错误而无法改变值。尝试这个。
定义:

var flag = false; 

你的成功的功能应该是:

success: function (data) { 
       if (data != '') { 
        var response = $(data).find("#gmp_stuff").html(); 
        employee_email = $(data).find(".EMP_EMAIL>span").html(); 
        //alert(employee_email); 
        $("#user_responses").html(response); 
        //$(function() { 
        $("#user_responses").dialog({ 
         dialogClass: 'transparent', 
         resizable: false, 
         draggable: false, 
         modal: true, 

         width: 1000, 
         autoOpen: false, 
         overlay: { opacity: 0 } 
        }); 

        $('#user_responses').dialog('open'); 
        $('#user_responses').css('display', ''); 
        //}); 
        flag = true; 
       } 
      } 

而且sendEmail()可以是:

function sendEmail(){ 
    if(flag) 
    { 
     request = $.ajax({ 
      url: "send_email.php?"+employee_email , 
      type: "post", 
      success: function(data){ 
       $("#email_responses").html(); 
      }, 
      error:function(){ 
       alert("failure"); 
       $("#email_responses").html('error occured'); 
      } 
     }); 
    } 
    else 
     alert('Sending email is unavailable currently. PLease try after some time.'); 
} 
+0

是的,你是对的,但在我的情况下,它不是正确的,因为第一个函数调用是在页面加载,但第二函数调用实际上是在第一次加载后的按钮点击,所以你认为它会工作然后 –

+0

@ kwk.stack:请参阅我已经更新了我的答案 – P5Coder

+0

你是非常的P5coder你让我非常简单的敬礼.. –

1

即使这已经回答了上百次的那样,我也给你一个简短的解释。

由于您正在处理2个异步调用,因此您无法在正常的同步流程中访问第一个调用的数据。

让你的第一个函数返回的$.ajax

function showCustomer(){ 
    return $.ajax({ /* ... */ }); 

并访问回调返回的数据:

showCustomer().done(function(data){ 
    console.log($(data).find(".EMP_EMAIL>span").html()); 
}); 

这是假设你正在使用jQuery 1.5或以上,其中Ajax调用公开承诺。

另一种选择是嵌套ajax调用(在第一个成功处理程序中调用第二个)。

1

您正在通过AJAX调用更新employee_email值。只要第一个函数被调用,它就会进行AJAX调用并移至第二个函数。第二个函数不会看到值更改,employee_email根本不会改变。 你有2个选项 -

  • 使用第二个函数完成第一个函数。
  • 在第一次调用中使用Deferred对象,并完成它调用第二个函数。
+0

但我的第一个函数调用是在页面加载和第二个调用是在按钮单击。数据在jquery ui对话框中包含按钮以及每个客户,所以如果管理员想发送电子邮件给所有客户中的任何一个,他只需点击按钮并向他发送电子邮件 –

相关问题