2015-07-20 112 views
1

我有一些jQuery的是成功地擊中了終點,這裏是我的代碼未捕獲的SyntaxError:意外的令牌:返回JSON

$.ajax({ 
    dataType: "json", 
    type: "GET", 
    url: "https://url.that-works.com/env/Development/GetDevs/", 
    username: "username", 
    password: "password", 
    data: "callback=?" 
}) 
.done(function (data) { 
    alert("success"); 
}) 
; 

的代碼返回以下JSON響應 - 我可以在Chrome中看到開發工具:

{ 
"developments": [ 
    { 
     "name": "h2010 Ph2" 
    }, 
    { 
     "name": "The Meadows Ph2" 
    }, 
    { 
     "name": "h2010 Ph3" 
    }, 
    { 
     "name": "h2010 Ph4" 
    }, 
    { 
     "name": "The Meadows Ph3" 
    } 
    ] 
} 

我檢查,這是返回有效的JSON,但我不斷收到錯誤消息:未捕獲的SyntaxError:意外的標記:

我不確定我在這裏做錯了什麼,或者爲什麼我收到這條消息,任何指導都會非常感激。

bengrah。

+0

你從哪裏得到這個錯誤? – epascarello

+1

沒有返回application/json作爲MIME類型?? – vogomatix

+0

@vogomatix - 不可以。 'dataType:「json」,'導致jQuery忽略內容類型 – Quentin

回答

0

最終找出答案。

在我們的案例中,我們使用的是一箇中間件設備,該設備生成腳本命令獲取JSON等的上述URL/orchestration。我們試圖做的是使用JSONP請求獲取此信息,但編排返回JSON,未包含在函數中,這是我們的問題所在。

相反,我們把它改成一個標準JSON得到請求,然後引起了接入控制允許起源錯誤(良好的鏈路here)。此時,我們將Access-Control-Allow-Origins設置添加到編排/服務器端 - 然後我們能夠成功將JSON恢復爲可用格式。

1

在jQuery的文檔,你可以找到以下內容:

「跨域除非請求包括其請求選項jsonp: falsejson請求轉換爲jsonp

因此,您可能正在進行跨域調用,並且由於您指定了dataType: 'json'而將其轉換爲jsonp

當JSONP模式,jQuery的尋找這樣一種反應:

jQuery18406445654265099913_1319844792316({ 
"developments": [ 
    { 
     "name": "h2010 Ph2" 
    }, 
    { 
     "name": "The Meadows Ph2" 
    }, 
    { 
     "name": "h2010 Ph3" 
    }, 
    { 
     "name": "h2010 Ph4" 
    }, 
    { 
     "name": "The Meadows Ph3" 
    } 
    ] 
}) 

而不是一個JSON字符串,這樣你就皈依過程中得到一個錯誤。 JSONP需要一個javascript,而不是一個字符串。 如果你看看jQuery代碼,你可以更清楚地瞭解它,但這是一般的。

+1

哇.jQuery做的太多了! – Quentin

+0

@Reflective我應該改變我的數據類型爲_jsonp_ - 我會看看這個jQuery文檔。 – bengrah

+0

如果將它從JSON更改爲JSONP無關緊要,它將作爲JSONP執行,因爲它是跨域調用,但如果必須在代碼中正確,請將其更改爲JSONP,因爲它實際上是JSONP調用。 – Reflective

相關問題