开发者问题收集

从 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