javascript - 使用 $.getJSON 获取 url 并正确解析它

标签 javascript jquery json

这可能真的很愚蠢,但我找不到我的代码的问题。它获取一个返回 json 的 url,然后该函数应该返回一个字符串:

function getit() {
  var ws_url = 'example.com/test.js';
  var user = false;

  $.getJSON(ws_url, function(data) {
    alert('user '+data.user);//shows john
    user = data.user || false;
  });

  return user;//should return john but returns false
}

test.js 会有这样的内容:

{"id":"12","username":"ses","user":"john","error":""}

或者像这样:

{"error":"123"}

我还尝试了 if (data.user) {} else {} 但它也不起作用..

那么我错过了什么?

谢谢:)

最佳答案

问题来自于 $.getJSON() 调用是异步的。一旦 ajax 请求被触发,处理就会在 getit() 内继续进行,并且您的函数会立即返回 false。稍后,Ajax 响应返回并设置 user,但是您的 getit() 函数return很久以前就已经返回了!

您可以使用 async 选项强制 Ajax 调用同步,如下所示:

  $.ajax({
    async: false,
    url: ws_url,
    type: "GET",
    success: function(data) {
        alert('user '+data.user);//shows john
        user = data.user || false;
    }
  });

如果您这样做,您的浏览器将阻止该脚本,直到 Ajax 调用返回。一般来说,这不是理想的行为(这就是为什么默认值为 async: true),因此我建议重新处理调用 getit() 的任何内容,并且让它期望尽可能处理它的结果,也许可以通过将它自己的回调函数传递给 getit() ,然后在 getit() 完成时执行该回调函数。 p>

关于javascript - 使用 $.getJSON 获取 url 并正确解析它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2657369/

相关文章:

javascript - jQuery Ajax 文件上传

javascript - 是否可以在关闭 JS 的情况下使 AJAX 站点可抓取并优雅地降级?

javascript - 如何防止在我的 javascript 函数中重复?

php - 使用ajax更新数据库中的表

javascript - 根据输入类型隐藏/显示=文件值

javascript - 处理进出 mysql 的特殊字符

javascript - Jquery 图像预加载器(我如何让loading.gif 更快地出现)

javascript - jQuery .each() 仅打印外部 Json 中的最后一项

javascript - graphql查询转json查询

javascript - JSON 从 url 到 PHP 表