$ .get和$ .getJSON有什么区别?

时间:2014-03-21 06:19:53

标签: javascript jquery json

我想弄清楚$ .get和$ .getJSON

之间的区别

我有一个名为Test.JSON的外部文件,它只包含以下内容:

{ "name": "John" }

我可以用

$.getJSON('Test.JSON', function(data) {
  console.log(data);
});

或者

$.get('Test.JSON', function(data) {
  console.log(data);
});

我在控制台中得到了相同的结果

Object {name: "getJSON"} 

是因为我的文件扩展名是.JSON吗?

如果我将文件扩展名更改为.js(即Test.js),则没有任何内容打印到$ .get的控制台,但我仍然得到$ .getJSON的相同结果

作为这个问题的第二部分,我想如果我在Test.js中将对象用单引号括起来

'{ "name": "John" }'

然后我可以这样做:

$.get('Test.js', function(data) {
  console.log($.parseJSON(data));
});

但是这给了我

Uncaught SyntaxError: Unexpected token '

如你所见,我完全糊涂了。

3 个答案:

答案 0 :(得分:2)

如果$.getJSON

  • jQuery发送Accept: application/json标题
  • jQuery解释入站响应,将其转换为JavaScript对象,并将其传递给回调(因此您不必混淆eval或其他转换机制)。

许多服务器端框架(例如Rails)会自动检测Accept标头并适当地处理请求。如果您使用的是其他框架或自行编辑,则可以检查Accept标头以检测格式。

答案 1 :(得分:0)

您收到语法错误的原因是因为输入是:

"'{ \"name\": \"John\" }'"
如果没有额外的单引号,

$.parseJSON应该可以正常工作。你确定你第一次尝试时没有输入错字号吗?

答案 2 :(得分:0)

我删除了单引号,因此Test.js只是

{ "name": "John" }

当我尝试

$.get('Test.js', function(data) {
  console.log($parseJSON(data));
});

控制台中根本没有任何内容。

如果我这样做

var data = '{"name":"John"}'
console.log($.parseJSON(data));

然后我得到了理想的结果。

我正在努力尝试理解为什么当我使用$ .get来检索该字符串时(有或没有围绕对象的单引号),我得到一个错误,或者根本没有对象。