在静态 json 文件上的 Node js 上使用 getJSON 时不支持获取协议

Posted

技术标签:

【中文标题】在静态 json 文件上的 Node js 上使用 getJSON 时不支持获取协议【英文标题】:Getting protocol not supported when using getJSON on Node js on static json file 【发布时间】:2013-09-26 23:32:04 【问题描述】:

在我的节点 js 文件中,我有以下代码:

var jqxhr = $.getJSON( "favs.json", function() 
    console.log( "success" );
)
.done(function() 
    console.log( "second success" );
)
.fail(function( jqxhr, textStatus, error ) 
    var err = textStatus + ", " + error;
    console.log( "Request Failed: " + err );
)
.always(function() 
    console.log( "complete" );
);

并且在服务器中有一个名为favs.json的文件,和上面的js文件在同一个目录下。但是,当我访问该页面时,我得到了错误:

Request Failed: error, Protocol not supported.

有谁知道怎么回事?

谢谢。

【问题讨论】:

在服务器端我们 fs 读取文件而不是 getJSON getJSON 用于前端 【参考方案1】:

并且在服务端有一个名为favs.json的文件,和上面的js文件在同一目录下。

如果文件位于服务器上,为什么不直接使用fs.readFile() 读取它?

var fs = require('fs');
var fileContents;
fs.readFile('./favs.json', function (err, data) 
    if (err) throw err;
    fileContents = data;
    // ...
);

如果您真的想使用XMLHttpRequest 获取该文件的内容,

    确保可以通过应用程序中的 HTTP(S) 服务器访问它。 输入要获取的文件的完整 URL(例如 http://localhost/favs.json。)

显然$.getJSON 在未指定时使用了一个意外(可能为 null)的值作为协议。

【讨论】:

以上是关于在静态 json 文件上的 Node js 上使用 getJSON 时不支持获取协议的主要内容,如果未能解决你的问题,请参考以下文章

Node.js Express js在较大文件上提供静态文件的速度非常慢

如何使用 node.js 在 html 中包含静态文件

使用 Express 4 在 Node.js 中解析 JSON 发布请求

从运行在 node.js 上的 json 获取数据

Node.js Express 接收邮递员为空

Node.js 中的面向行的流