尝试编写一个从文本文件中读取数据的函数。该函数工作正常,但我想在其他函数中读取其数据。有人可以帮我告诉如何将y的值返回到read()函数
<!DOCTYPE html>
<html>
<head>
<script charset="utf-8" src="jquery-2.0.3.min.js"></script>
<script type="text/javascript">
function read() {
$.get("version.txt?_ts=" + new Date().getTime(), function (data) {
var y1 = parseInt(data[0]);
var y2 = parseInt(data[1]);
var y = (y1 * 10) + y2;
return y;
});
}
function drr() {
var d = read();
document.write(d);
}
</script>
<body onload=read()>not working</body>
</html>
答案 0 :(得分:1)
在您的代码中,您正在使用AJAX通过JQuery:
$.get(url, callback)
$get
方法命中url
并将结果传递给回调方法,它不返回它。由于AJAX是异步的,因此callback
不会立即被调用,而是发生这样的事情:
$.get
被称为read
方法继续(在您的情况下退出,因为没有其他代码)$.get
收到服务器的回复callback
函数在上面的序列中,第二步可以与之后的任何步骤交换。不过,这个序列是为了表明当read
方法退出时与之间没有关系 >。因此,如果您需要对结果执行某些操作(在页面上显示),那么您应该在callback
方法中执行此操作。
以下是使用您的代码编辑的示例:
function read() {
$.get("version.txt?_ts=" + new Date().getTime(), function(data) {
var y1 = parseInt(data[0]);
var y2 = parseInt(data[1]);
var y = (y1*10)+y2;
document.write(y);
});
}
除了AJAX的异步性质之外,您的代码还有另一个问题。在read
方法中,您希望返回一个值,但实际上它不会返回任何值。这会使drr
函数无效。
答案 1 :(得分:0)
这样做:
function read()
{
$.get("version.txt?_ts=" + new Date().getTime(), function(data) {
var y1= parseInt(data[0]);
var y2= parseInt(data[1]);
var y= (y1*10)+y2;
document.write(y); /* this is the change, process the result when it's received here */
});
}
function drr()
{
read();
}
还将html更改为更合适的语法
<body unload="read();">
通常,当你有$ .ajax()调用时,它是异步的 - 当成功处理请求时,会发出请求并执行成功处理程序。
所以如果你使用ajax()调用的返回值,它不是从服务器收到的响应,而是一个请求对象。
答案 2 :(得分:0)
$ .get是异步函数,读取函数没有返回,需要使用回调:
function read(callback) {
$.get("version.txt?_ts=" + new Date().getTime(), function(data) {
var y1 = parseInt(data[0]);
var y2 = parseInt(data[1]);
var y = (y1 * 10) + y2;
callback(y);
});
}
function drr() {
read(function(txt) {
document.write(txt);
});
}
答案 3 :(得分:0)
试试这个。
function read() {
var result=0;
$.get("version.txt?_ts=" + new Date().getTime(), function (data) {
var y1 = parseInt(data[0]);
var y2 = parseInt(data[1]);
var y = (y1 * 10) + y2;
result=y;
});
return result;
}
function drr() {
var d = read();
document.write(d);
}