簡體   English   中英

jQuery.ajax#get 之后出現意外的令牌冒號 JSON

[英]Unexpected token colon JSON after jQuery.ajax#get

我在nodejs上創建了一個極簡的 API,它以 JSON 格式返回數據。

但是每次我嘗試進行 ajax#get 調用並將我的 API 作為 URL 傳遞時,我都會收到一個錯誤,從 Chrome 判斷,我收到一個"Unexpected token :"錯誤;

這里是nodejs + express 中的服務器代碼:

var
 http    = require( 'http' ),
 express = require( 'express' ),
 app      = express(),
 server  = http.createServer( app );

app.get( '/', function( req, res ) {
    console.log( 'req received' );
        res.setHeader('Content-Type', 'application/json');
    res.end( JSON.stringify({
    Name : "Tom",
    Description : "Hello it's me!"
    }) );

});

server.listen(3000, function() {
    console.log( 'Listening on 3000' );
});

"/"返回的 JSON 是: {"Name":"Tom","Description":"Hello it's me!"}

這是我從客戶端 js 打來的電話:

$.ajax({
    url: findUrl,
    type: 'get',
    dataType: 'jsonp',
    success: function ( data ) {
        self.name( data.Name );
        self.description( data.Description );
    },
    error: function( jqXHR, textStatus, errorThrown ) {
        alert(errorThrown);
    }
});

繪制錯誤時,我得到: "jQuery111108398571682628244_1403193212453 was not called"

有人能幫我嗎?

我知道已經有人問過這個問題,但我還沒有找到修復我的程序的解決方案。

為了支持JSONP 請求,服務器必須在響應中包含P或“ Padding ”。

jQuery111108398571682628244_1403193212453({"Name":"Tom","Description":"Hello it's me!"})

語法錯誤"Unexpected token :"是因為 JSONP 被解析為 JavaScript,其中{...}也代表blocks 它只是利用 JSON 和 JavaScript 的類似語法來定義傳遞給全局函數調用的數據。

默認情況下,jQuery 將包含一個帶有函數名稱的callback查詢字符串參數:

var callback = req.query.callback;
var data = JSON.stringify({
    Name : "Tom",
    Description : "Hello it's me!"
});

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

ExpressJS 還包括res.jsonp()已經實現了這個條件:

app.get( '/', function( req, res ) {
    console.log( 'req received' );

    res.jsonp({
        Name : "Tom",
        Description : "Hello it's me!"
    });
});

您想使用 dataType: "json" 而不是 "jsonp"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM