这可能真的很愚蠢,但是我找不到我的代码的问题。它获取一个返回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()后执行。

07-28 11:09