在没有Web服务器的情况下使用jQuery获取JSON文件

tes*_*est 7 javascript jquery internet-explorer json jquery-data

我有一个编码面试测验,用于前端使用JSON和诸如此类的东西.我提交了我的文件,但我只想了解我所缺少的内容.

其中一个要求是Should not require a web server, and should be able to run offline..

我用过jQuery和习惯$.getJSON().JSON文件中获取数据.我把它扔在我的WAMP本地服务器上,它在所有三个主要浏览器(IE,Firefox,Chrome)上都运行良好.然后我把这个项目移到了Desktop,如此钟表,没有LOCALSERVER.

在Firefox 30.0上,它运行良好.没问题.

Oon谷歌浏览器,我知道你没有网络服务器就无法访问本地文件......

但是,在Internet Explorer 11上,它无效.为什么?

这是我正在使用的.这并不复杂.

function loadTasks() {
  console.log("Loading tasks...");
  $.getJSON("data.json", function(result) {
    $.each(result, function(i, task) {
      $("#load_tasks").append(
        "<div class='row'><span class='data-task'>" + task.name +
        "</span> <span class='data-date'>" + task.date +
        "</span> <span class='data-name'>" + task.assigned +
        "</span> </div>");
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

这是data.json

MId*_*hna 6

这似乎是jQuery中的一个错误.这个bug已经报告给了jQuery.错误状态是固定的.但看起来,这个bug仍然存在.

说明

通常在IE中,ajax是通过ActiveXObjects实现的.但是在IE11中,他们对ActiveXObject实现进行了一些调整,如果我们尝试执行以下操作:

typeof(window.ActiveXObject)
Run Code Online (Sandbox Code Playgroud)

而不是返回'功能',正如在IE文档中所说,它返回undefined.jQuery曾经使用它来在普通浏览器中的xhr和IE中的xhr之间切换.由于检查评估为未定义,因此运行用于在普通浏览器中创建xhr对象的代码.(当然这是一个错误,奇怪的是,对于非本地文件,它工作正常).

提交给bugs.jquery.com的bug中,bug报告者问道,

要解决这个问题,就足以改变条件:使用"window.ActiveXObject!== undefined?" 而不是"window.ActiveXObject?"

jQuery开发人员确实尝试使用此提交修复此问题,但提交下的注释表明它仍然没有修复,并且还提出了解决此问题的可能方法.

var activex; // save activex somewhere so that it only need to check once
if ( activex === undefined ) 
  try { 
    new ActiveXObject("MSXML2.XMLHTTP.3.0");
    activex = true; 
  } catch (e) { 
    activex = false 
  }
xhr = activex ? createActiveXHR() : createStandardXHR(); 
Run Code Online (Sandbox Code Playgroud)


Vix*_*inG 0

来源:https ://stackoverflow.com/a/22368301/1845953

发布答案以防万一其他人遇到它。在我的例子中,IE 正在加载一个 jquery 版本,这显然会导致“JSON undefined”错误。这是我为解决该问题所做的操作:

<!--[if lt IE 9]>
    <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="http://code.jquery.com/jquery-2.0.3.js"></script>
<!--<![endif]-->
Run Code Online (Sandbox Code Playgroud)

最新的是jquery 2.1.1直接链接,但它说:

(不支持IE<9)

所以我猜jquery 1.11.1直接链接

我发现如果你使用带有此标志的 Chrome,你可以在 Chrome 中在本地文件上开发 ajax 和 jquery 的东西:(--allow-file-access-from-files 来源)