jQuery.ajax#get 中出現意外的令牌冒號JSON
問題:
使用時jQuery.ajax#get 從Node.js API 檢索JSON 資料時,Chrome 中出現「Unexpected token :」錯誤。
Context:
調查:
檢查 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中文網其他相關文章!