“格式不正确”通过 jQuery.ajax 在 Firefox 中加载客户端 JSON 时出现警告

发布于 2024-08-28 15:44:07 字数 881 浏览 5 评论 0原文

我正在使用 jQuery 的 ajax 方法来获取静态 JSON 文件。数据是从本地文件系统加载的,因此没有服务器,所以我无法更改 MIME 类型。

这在 Safari 中工作正常,但 Firefox (3.6.3) 报告该文件“格式不正确”。我知道并查看了 Stack Overflow 上的类似帖子:

使用 XMLHttpRequest 加载 JSON 文件时在 Firefox 中出现“格式不正确”错误

我相信我的 JSON 格式良好:

{
    "_": ["appl", "goog", "yhoo", "vz", "t"]
}

我的 ajax 调用很简单:

$.ajax({
    url: 'data/tickers.json', 
    dataType: 'json',
    async: true,
    data: null,
    success: function(data, textStatus, request) {
        callback(data);
    }
});

如果我用 a 包装 JSON文档标签:

<document>JSON data</document>

正如上面提到的另一个堆栈溢出问题中提到的,ajax 调用失败并出现解析错误。

那么:有没有办法在读取客户端 JSON 文件时避免 Firefox 警告?

I am using jQuery's ajax method to acquire a static JSON file. The data is loaded from the local file system, hence there is no server, so I can't change the MIME type.

This works fine in Safari, but Firefox (3.6.3) reports the file to be "not well-formed". I am aware of, and have reviewed, a similar post here on Stack Overflow:

"not well-formed" error in Firefox when loading JSON file with XMLHttpRequest

I believe my JSON is well-formed:

{
    "_": ["appl", "goog", "yhoo", "vz", "t"]
}

My ajax call is straightforward:

$.ajax({
    url: 'data/tickers.json', 
    dataType: 'json',
    async: true,
    data: null,
    success: function(data, textStatus, request) {
        callback(data);
    }
});

If I wrap the JSON with a document tag:

<document>JSON data</document>

as was mentioned in the other Stack Overflow question referenced above, the ajax call fails with a parse error.

So: is there a way to avoid the Firefox warning when reading in client-side JSON files?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

川水往事 2024-09-04 15:44:08

有时不能选择使用 HTTP 服务器,这可能意味着不会自动为某些文件提供 MIME 类型。改编自 Peter Hoffman 对 jQuery .getJSON Firefox 3 语法错误未定义的回答,在进行任何 $.getJSON() 调用之前使用此代码:

$.ajaxSetup({beforeSend: function(xhr){
  if (xhr.overrideMimeType)
  {
    xhr.overrideMimeType("application/json");
  }
}
});

或者,如果您使用 $.ajax():

$.ajax({
  url: url,
  beforeSend: function(xhr){
    if (xhr.overrideMimeType)
    {
      xhr.overrideMimeType("application/json");
    }
  },
  dataType: 'json',
  data: data,
  success: callback
});

Sometimes using an HTTP server is not an option, which may mean that MIME types won't be automatically provided for some files. Adapted from Peter Hoffman's answer for jQuery .getJSON Firefox 3 Syntax Error Undefined, use this code before you make any $.getJSON() calls:

$.ajaxSetup({beforeSend: function(xhr){
  if (xhr.overrideMimeType)
  {
    xhr.overrideMimeType("application/json");
  }
}
});

Or, if you're using $.ajax():

$.ajax({
  url: url,
  beforeSend: function(xhr){
    if (xhr.overrideMimeType)
    {
      xhr.overrideMimeType("application/json");
    }
  },
  dataType: 'json',
  data: data,
  success: callback
});
喵星人汪星人 2024-09-04 15:44:08

本地文件和脚本不能混合。 方式涉及太多浏览器安全问题和其他奇怪的事情。如果你想测试一些东西,你应该通过 HTTP 服务器运行你的东西。在本地安装一个可能是一个好主意。

Local files and scripting don't mix. Way too much browser security stuff and other weirdness involved. If you want to test things, you should run your stuff through a HTTP server. Installing one locally might be a good idea.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文