首页 > web前端 > js教程 > 正文

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

Patricia Arquette
发布: 2024-10-19 22:53:01
原创
618 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!