加载 JSON 适用于 XMLHttpRequest 但不适用于 jQuery

Posted

技术标签:

【中文标题】加载 JSON 适用于 XMLHttpRequest 但不适用于 jQuery【英文标题】:Loading JSON works with XMLHttpRequest but not with jQuery 【发布时间】:2020-10-08 13:04:19 【问题描述】:

我正在尝试从我的谷歌存储中获取 JSON 文件的内容。我可以使它与 XMLHttpRequest 一起工作,但不能与 jquery 一起工作,我不知道为什么。

这行得通:

    var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() 
    if (this.readyState == 4 && this.status == 200) 
        console.log(this);
    
;
xhttp.open("GET", fileUrl, true);
xhttp.send();

但这不是:

$.getJSON(fileUrl, function(data) 
  console.log( "success", data);
);

文件存储在我的谷歌存储https://storage.googleapis.com/ 我已使用 gsutil 将 cors 设置为允许任何来源(使用通配符 *)。

只有 jquery 我才能得到 ​​p>

Access to XMLHttpRequest at 'https://storage.googleapis.com/...' from origin 'http://localhost:1234' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

如何使用 jquery 进行这项工作?因为我发现 XMLHttpRequest 解决方案非常丑陋。

【问题讨论】:

【参考方案1】:

你试过fetch()吗?我知道它不是 jQuery,但它看起来比 XMLHttpRequest 好得多:

// with async-await:
(async function() 
  const response1 = await fetch('https://jsonplaceholder.typicode.com/todos/1')
  const json1 = await response1.json()
  console.log('Async-await:', json1)
)();

// with Promise:
const response2 = fetch('https://jsonplaceholder.typicode.com/todos/1')
  .then(response => response.json())
  .then(json2 => console.log('Promise:', json2));

【讨论】:

以上是关于加载 JSON 适用于 XMLHttpRequest 但不适用于 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

将 Json 文件加载到表时结果不一致 [重复]

Jquery mobile getJSON 适用于浏览器但不适用于移动设备

Jmeter入门15 JSON Assertion 适用于json格式的响应断言

json 适用于Linux和MacOS的VSCode设置

json 适用于.NET Core的xUnit测试项目

Ajax中XMLHttpReques