如何在不使用参数的情况下在javascript中传递变量?

时间:2012-12-10 08:24:14

标签: javascript variables parameters

我有一个函数用于从文本文件中获取数据并在另一个函数中提醒它。

  var library_name; // Global Variable

  function getLibraryName(){
         jQuery.get('stream.txt', function(data) {
           library_name = data.toString().substring(17,data.length);
         });
  }

 function saveFeedback() {
    alert(library_name);
  }

调用saveFeedback时,它会提醒library_name

我试过把它放在像这个

这样的功能中
function saveFeedback() {
    jQuery.get('stream.txt', function(data) {
         library_name = data.toString().substring(17,data.length);
    });

    alert(library_name);
}

但仍然在控制台

中继续说未定义

如何解决这个问题?不使用参数因为必须从其他地方调用saveFeedback函数。

6 个答案:

答案 0 :(得分:0)

get结束时调用.get的第二个参数。你说,“获取stream.txt,当它完成时,执行这个功能”。以下在get结束时调用saveFeedback:

function getLibraryName(){
         jQuery.get('stream.txt', function(data) {
           library_name = data.toString().substring(17,data.length);
           saveFeedback();
         });
  }

因为get是异步的,所以你的解释器会在调用saveFeedback函数之前实例化success函数(尽管像JSLint这样的一些健全性检查器可能希望你在{{1}之前定义saveFeedback }}

答案 1 :(得分:0)

你应该在$ .get(data)回调中使用save Feedback()函数,因为它是异步请求而你不知道什么时候会完成。

答案 2 :(得分:0)

您可以使用$ .data();

创建一个隐藏的输入字段并将数据附加到该字段

例如:

  function getLibraryName(){
         jQuery.get('stream.txt', function(data) {
           var library_name = data.toString().substring(17,data.length);
           $('#myHiddenField').data('library_name', library_name);
         });
  }

 function saveFeedback() {
    alert($('#myHiddenField').data('library_name'));
  }

答案 3 :(得分:0)

jQuery get启动异步调用。异步意味着它的结果将在稍后返回 ......可能在很短的时间之后,也许很多秒之后。启动此调用后,代码会立即进入下一行,即您的警报。 在异步调用返回之前发生此警报,因此该变量当然仍为undefined - 尚未设置。

解决问题的一种方法可能是告诉jQuery使调用同步。但这是错误的答案,因为它会阻止浏览器在呼叫发生时响应用户交互。相反,您需要调整您对异步调用的看法。基本概念是,不是像一个普通的程序性配方一样一步一步地做一个大的功能(做第1步,然后是第2步,然后是第3步),而是必须设置两个不同的配方或代码片段。 :一个用于启动ajax调用,然后退出,另一个用于响应ajax调用的结果。

现在,您已经拥有两个功能。由于我已经解释过的原因,你无法将它们组合在一起。但是,你可以链接它们,或者将它们封装在另一个中:

var library_name;

function saveFeedback() {
   alert(library_name);
}

function getLibraryName(){
   jQuery.get('stream.txt', function(data) {
      library_name = data.toString().substring(17 ,data.length);
      saveFeedback(); // this chains the two functions together
   });
}

或者甚至更好:

var library_name;

function saveFeedback() {
   alert(library_name);
}

function receiveLibraryName(data) {
   library_name = data.toString().substring(17, data.length);
   saveFeedback();
   // additional statements here after saving
}

function getLibraryName(){
   jQuery.get('stream.txt', receiveLibraryName);
}

重点在于无法继续getLibraryName函数中的下一个语句。在ajax调用之后你想要采取的步骤必须在另一个函数内部:要么在回调函数本身,要么在从回调函数调用的另一个函数中。

答案 4 :(得分:0)

请尝试以下代码:

var library_name;
function getLibraryName(){
     jQuery.get('stream.txt', function(data) {
       let lbName= data.toString().substring(17,data.length);
       saveFeedback(lbName);
  });
}

function saveFeedback(lbName) {
   library_name = lbName; //If you are using library_name in other code
   alert(library_name);
}

答案 5 :(得分:-2)

您必须在jquery.get之前定义library_name一次。因为如果jquery.get没有工作,则在调用alert时不会创建library_name。 请加     var library_name; 作为saveFeedback()的第一行。