从 Ajax 请求获取数据显示
2017-06-27
272
我已经阅读了这篇文章 如何返回异步调用的响应? 但是我无法想出解决方案。 我正在执行 ajax 请求
function getdata(url)
{
console.log('Started');
jQuery.ajax({
type: "GET",
url: "http://myserver.com/myscript.php",
dataType: "json",
error: function (xhr) {
console.log('Error',xhr.status);
},
success: function (response) {
console.log('Success',response);
}
});
}
控制台显示一切正常,但是当我说
var chinese = getdata();
获取数据时。我一直得到:
Uncaught TypeError: Cannot read property 'length' of undefined error for this line
var text = chinese[Math.floor(Math.random()*chinese.length)];
有人可以帮我吗?
3个回答
问题是您正在使用异步方法,但期望获得同步结果。
因此,您应该在异步调用的结果中使用如下代码:
function getdata(url) {
console.log('Started');
jQuery.ajax({
type: 'GET',
url: url,
dataType: 'json',
error: function(xhr) {
console.log('Error', xhr.status);
},
success: function(chinese) {
var text = chinese[Math.floor(Math.random()*chinese.length)];
// Do something else with text
}
});
}
getData('http://myserver.com/myscript.php');
希望对您有所帮助:)
ajimix
2017-06-27
您收到的错误是由于调用的异步特性造成的。我建议您在从 API 获得成功响应后分配值,如下所示。
var chinese = getdata();
然后函数
getdata()
将类似于
function getdata(url)
{
console.log('Started');
jQuery.ajax({
type: "GET",
url: "http://myserver.com/myscript.php",
dataType: "json",
error: function (xhr) {
console.log('Error',xhr.status);
},
success: function (response) {
initChinese(response.data);
}
});
}
并创建一个函数
initChinese()
,例如
var text;
function initChinese(chinese){
text = chinese[Math.floor(Math.random()*chinese.length)];
}
您还可以在全局范围内声明
text
变量,然后在
success
函数内将值分配给
text
变量,而无需创建新函数
initChinese
。
Ankit Agarwal
2017-06-27
问题是您的GetData功能不会返回任何内容。在您的getData函数中,您正在执行AJAX请求,这是异步请求。因此,您要要求的数据不会,也不能使用您的GetData函数返回。
,但是您将在成功函数中具有请求的数据:
200841967 < /code>
,由于我无法测试您的代码,因此您可以自己调试其余部分。但是响应变量很可能是您的“中文”变量。
Daniel Z.
2017-06-27