javascript - 意外的 token ":",其中 JSON 从 Node 和 Express 返回

标签 javascript json node.js ajax express

我正在使用 Node.js 和 Express 构建一个小型 Web 服务,但遇到了一些问题。一切似乎都工作得很好,直到我真正在浏览器中将它与 Ajax 一起使用。如果我在 Postman 中运行它,我会得到:

{
  "status": "ok",
  "data": [
    {
      "GUID": "2f779770-9e1c-415f-9518-ff7fd7d6631c",
      "name": "The Revolver",
      "description": "Rye heavy bourbon, coffee liqueur, orange bitters, orange garnish.",
      "active": 1,
      "categories": [
        "94162f2e-3b2f-4521-a543-068ed6c81011"
      ]
    },
    {
      "GUID": "f05a33ad-e684-4ae0-804c-0c1a61b9945d",
      "name": "Jack Rose",
      "description": "Laird's Applejack, Grenadine, Lemon, Peychaud's bitters, Lemon twist",
      "active": 1,
      "categories": []
    }
  ]
}

标题包括 内容类型 →application/json;字符集=utf-8

但是当我进行 ajax 调用时,Chrome 会显示“Uncaught SyntaxError: Unexpected token :”

我使用 res.json({status: "ok", data: result}) 从 Express 返回响应。我也尝试过 res.setHeader('Content-Type', 'application/json'); 但没有成功。

有什么想法吗?

编辑:这是 ajax 调用:

function getDrinks(){
  $.ajax({
    url: serviceURL + "getDrinks",
    type: "GET",
    dataType: "jsonp",
    success: function(result){
      if (result.status=="ok"){
        var tableHTML=""
        for (var i = 0; i < result.data.length; i++) {
          var drink=result.data[i]
          tableHTML+="<tr><td>"+drink.name+"</td></tr>"
        }
        tableHTML="<table>"+tableHTML+"</table>"
        $("#drinksContainer").html(tableHTML);
      }
    }
  })
}

最佳答案

客户端和服务器需要就使用 JSON 还是 JSON-P 达成一致。这两种格式相关但不能互换。

目前,客户端正在等待 JSON-P...

dataType: "jsonp",

当服务器使用 JSON 响应时...

res.json({status: "ok", data: result})
<小时/>

对于 JSON-P,服务器的响应应在 JSON 数据周围包含填充,由回调名称和括号组成。

var json = JSON.stringify({status: "ok", data: result});
res.send(req.query.callback + '(' + json + ')');

Express 还定义了 res.jsonp() 来简化此操作。

res.jsonp({status: "ok", data: result});

并且,jQuery 将为您提供一个生成的回调名称,通常由您正在使用的 jQuery 版本、一个随机数和一个时间戳组成。这样,响应应该类似于:

jQuery32101234567890123456_1496534400000({"status":"ok","data":...});

关于javascript - 意外的 token ":",其中 JSON 从 Node 和 Express 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359394/

相关文章:

javascript - React Native - 检索 AsyncStorage 中除键之外的所有内容?

java - 使用自定义类名反序列化具有不同根名称的 json

javascript - 优化慢速搜索算法 - javascript、JSON 和 localstorage

javascript - 在 Javascript 中将方法分配给变量

javascript - Node.js : New session at every refresh/access

javascript - 如何使用混合参数类型记录 JSDoc?

javascript - 正则表达式有(太多?)很多情况

javascript - 如何在 http 请求后更新 ng-repeat 列表

java - 如何使用 GSON 解析复杂的 JSON 字符串与 JSON 数组的混合?

MySQL 8 : ER_NOT_SUPPORTED_AUTH_MODE