从jQuery.get()获取响应的正确方法是什么?
var data = jQuery.get("output.csv");
我在读jQuery.get()必须有一个回调函数?这是为什么?以及如何使用此回调函数将响应分配回数据变量?
提前感谢您的帮助和澄清。
更新:
谢谢大家的答案和解释。我想我开始最终掌握你们所说的话了。 我的下面的代码只是在它的第一次迭代中做正确的事情。 其余的迭代它写入页面未定义。 我错过了什么吗?
<tbody>
<table id="myTable">
<script type="text/javascript">
$.get('output.csv', function(data) {
csvFile = jQuery.csv()(data);
for ( var x = 0; x < csvFile.length; x++ ) {
str = "<tr>";
for ( var y = 0; y < csvFile.length; y++) {
str += "<td>" + csvFile[y][y] + "</td>";
}
str += "</tr>";
}
$('#myTable').append(str);
});
</script>
</tbody>
</table>
答案 0 :(得分:8)
异步函数调用需要回调函数,例如AJAX GET请求。调用get
函数和获取响应之间存在延迟,这可能是毫秒或几分钟,因此您需要有一个在异步GET完成其工作时调用的回调函数。 p>
以下是有关jQuery的AJAX get
函数的更多信息:http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype。
来自jQuery的例子:
// this would call the get function and just
// move on, doing nothing with the results
$.get("test.php");
// this would return the results of the get
$.get("test.php", function(data){
alert("Data Loaded: " + data);
});
如果在尝试使用回调函数中的undefined
变量时获得data
,请在Firefox中的Firebug中打开控制台并观看get
请求。您可以看到原始请求及其返回的响应。在看到发送到服务器的内容以及发送回客户端的内容后,您应该更好地了解问题。
答案 1 :(得分:4)
我真的很难在事件的“document.ready”阶段将jQuery ajax的结果存入我的变量。
当用户在页面加载后触发选择框的“onchange”事件时,jQuery的ajax会加载到我的变量中,但是当页面首次加载时,数据不会提供变量。
我尝试了很多很多不同的方法,但最后,我需要的答案是在这个stackoverflow页面上:JQuery - Storing ajax response into global variable
感谢撰稿人Charles Guilbert,我能够将数据输入到我的变量中,即使我的页面首次加载也是如此。
以下是工作脚本的示例:
jQuery.extend
(
{
getValues: function(url)
{
var result = null;
$.ajax(
{
url: url,
type: 'get',
dataType: 'html',
async: false,
cache: false,
success: function(data)
{
result = data;
}
});
return result;
}
}
);
// Option List 1, when "Cats" is selected elsewhere
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats");
// Option List 1, when "Dogs" is selected elsewhere
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs");
// Option List 2, when "Cats" is selected elsewhere
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats");
// Option List 2, when "Dogs" is selected elsewhere
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs");
答案 2 :(得分:3)
实际上,在您的示例中,数据将是XMLHttpRequest请求对象。
var x;
$.get( 'output.csv', function(data){
x = data;
console.log(x); // will give you the contents.
});
答案 3 :(得分:3)
查看下面显示的代码。这与tsvanharen的代码几乎相同,除了我用实际的函数指针替换了回调的匿名函数,并且更明确一点,所以你可以看到发生了什么:
var x = null;
function myCallback(data)
{
alert("Data Loaded:" + data);
}
$.get("test.php", myCallback);
// the rest of your code
alert("The value of X is: " + x);
假设test.php加载了一两个小时,请注意警报可能出现的顺序:
1. "The value of X is"
2. "Data Loaded"
函数$.get()
即时运行。 JavaScript继续运行并立即运行其余代码。在后台,它正在test.php检索您的页面。 jQuery隐藏了一些混乱的细节。
回调函数($.get()
的第二个参数)稍后运行(异步)。或者,换句话说,函数myCallback
是事件的处理程序。该事件是“$.get()
已完成检索数据”。直到那时它才会运行。 $.get()
运行时它不会运行! $.get()
只会记住该功能的用途。
函数myCallback
可能会在处理$.get()
很久之后的几毫秒或几分钟后运行。
如果myCallback
在几分钟之后才运行,那么当运行“X值”代码时,x的值是多少?它仍然是null
。 有你的错误。
要使用从脚本中的页面检索的数据,您必须执行以下操作:
$.get()
来处理返回。别无其他。 [或者,至少,没有任何需要数据] 让页面就在那里。
...将来的某个时候......
X。您的回调函数将运行,并具有您的网页结果。 你的回调函数可以: *显示数据 *将该数据分配给变量 *调用其他功能 *顺其自然。
答案 4 :(得分:1)
您只需要在参数中指定回调函数来获取方法。您的数据将在您在函数中指定的变量中。
$.get("output.csv", function(data) {
// Put your function code here, the 'data' variable will hold your data.
});