我有一个函数用于从文本文件中获取数据并在另一个函数中提醒它。
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函数。
答案 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()的第一行。