首页  >  文章  >  web前端  >  如何解决使用 jQuery.ajax 从 Node.js 获取 JSON 时出现的“意外令牌:”错误?

如何解决使用 jQuery.ajax 从 Node.js 获取 JSON 时出现的“意外令牌:”错误?

Patricia Arquette
Patricia Arquette原创
2024-10-19 22:53:01619浏览

How to Resolve the

jQuery.ajax#get 中出现意外的令牌冒号 JSON

问题:

使用时jQuery.ajax#get 从 Node.js API 检索 JSON 数据时,Chrome 中出现“Unexpected token :”错误。

Context:

  • 服务器端代码: Node.js Express 服务器返回以下格式的 JSON 数据:{"Name":"Tom","Description":"Hello it's me!"}.
  • 客户端代码: 在 jQuery 脚本中发出 AJAX get 请求以检索 JSON 数据。

调查:

检查 Chrome 中的错误表明 JSON 响应包含意外的冒号 (:)。

解决方案:

启用 JSONP 支持:

出现此问题的原因是客户端期望 JSONP 响应,该响应是封装在 JavaScript 函数调用中的 JSON 数据。要启用 JSONP 支持,服务器必须在响应中包含“Padding”(“P”)。

<code class="text">jQuery111108398571682628244_1403193212453({"Name":"Tom","Description":"Hello it's me!"})</code>

服务器端代码修改:

至要在 Node.js Express 中支持 JSONP,请修改服务器代码如下:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  const callback = req.query.callback;
  const data = {
    Name: "Tom",
    Description: "Hello it's me!"
  };

  if (callback) {
    res.setHeader('Content-Type', 'text/javascript');
    res.end(callback + '(' + JSON.stringify(data) + ')');
  } else {
    res.json(data);
  }
});

或者:

使用 ExpressJS 内置的 res.jsonp() 方法:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.jsonp({
    Name: "Tom",
    Description: "Hello it's me!"
  });
});

客户端代码修改:

客户端无需修改。默认情况下,jQuery 将传递带有函数名称的回调查询字符串参数。

以上是如何解决使用 jQuery.ajax 从 Node.js 获取 JSON 时出现的“意外令牌:”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn