【问题标题】:jQuery: Fetch Ajax to variable?jQuery:获取 Ajax 到变量?
【发布时间】:2011-01-05 17:10:09
【问题描述】:

我认为下面显示的代码可以作为一个魅力,但显然它没有。我不知道为什么它不起作用 - 正确获取了 URL(用 firebug 检查),但它拒绝将结果保存到我的变量 (globalVar)。

我能做什么?

var globalVar;  

function fetchDataset(kategori){  

    $.getJSON(apiUrl + "?jsoncallback=?", function(json){
        globalVar = json;

        console.log(globalVar); // Returns Undefined!
    });


}

【问题讨论】:

  • 变量json的内容是什么?
  • 未定义!我现在明白 Zip 零了!
  • 是 json 格式不正确是静默失败,例如{ a: 1 } 必须是 { "a": 1 }。让你的 JSON 井井有条! :)
  • @mattcodes:恐怕这不是问题 - JSONlint 说我的 JSON 是有效的......
  • Hmm.. 我今天遇到了完全相同的问题,如果 JSON 不严格有效,getJSON 将静默失败 - 检查从服务器返回的 mime。所以改成 $.ajax(type: 'get', success:function, error: function(crap) { alert(crap); } 这样我们就可以看到问题出在哪里了

标签: javascript jquery ajax json jsonp


【解决方案1】:

我猜萤火虫应该显示你的回调的内容。我有一个类似的问题并使用 .parseJSON(); 解决了它

http://api.jquery.com/jQuery.parseJSON/

也许有帮助。

回调格式是否整齐/“正确”的 json?

【讨论】:

  • 嗨亚当 - 你能告诉我你是如何用 parseJSON 解决它的吗?实际上,回调似乎没有显示任何内容...
【解决方案2】:

您的变量不是全局变量。您在函数范围内定义了它。您的 Ajax 调用是异步运行的,这意味着您的函数将(可能)在返回 ajax 请求之前完成。尝试在函数之外声明 globalVar。即。

var globalVar;    
function fetchDataset(kategori){

编辑:另外,检查statusText(传递给回调函数的第二个变量)以确保您的请求没有错误。

【讨论】:

  • 嗨!那是我的疏忽—— globalVar 已经在函数之外声明了。感谢您的帮助!
  • 嗨 Drackir - 回调内部似乎没有实际发生任何事情。有什么建议吗?
  • @Industrial:也许尝试获取回调的第三个参数(xmlhttprequest 对象)并检查returnText 属性等于什么。
【解决方案3】:

您是在发出跨域请求吗?

如果是这样,请确保您使用 jsonp

JSONP 如果 URL 包含字符串“callback=?” (或类似的,由服务器端 API 定义),请求被视为 JSONP。有关详细信息,请参阅 $.ajax() 中对 jsonp 数据类型的讨论。

这里有一个jsonp的例子。 http://api.jquery.com/jQuery.getJSON/

【讨论】:

  • 是的 - 跨域 - 请求根据 FireBug 正确完成,但只是在脚本中未定义。
  • 是的,很好,但 getJSON 不会注入脚本标签。所以只是附加回调=?跨域是不够的。
【解决方案4】:

显然,没有任何效果,所以我最终创建了一个基于 PHP 的代理来传输任何跨域请求。把url改成PHP代理后,效果很好。

感谢大家的帮助。非常感谢!

【讨论】:

  • 你没说是跨域的!据我所知,这意味着您必须使用脚本标签而不是 ajax 请求,因为 getJSON 静默失败,这就是您的问题!
  • 脚本标签是什么意思?
  • 我认为 JSONP 可以处理跨域请求,如 jQuery 网站上所示,因此我没有写它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2016-02-29
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
相关资源
最近更新 更多