2011-06-28 76 views
5

有一個簡單的自動完成框(jQuery UI),它從Web服務獲取其源。該代碼是類似下面的東西:Jquery JSONP請求獲取200響應數據,但標誌錯誤

var autocompleteOptions = { 
    source = getDataFromService, 
    minLength: 3 
}; 

var getDataFromService = function(request, response) { 
    var ajaxOptions = { 
     url: "http://myservice:1234/somedata/", 
     dataType: "jsonp", 
     data: "someVariable = " + request.term, 
     success: function(data) { alert("data"); }, 
     error: function(xhr, description, error) { alert("failed"); } 
    }; 

    $.ajax(ajaxOptions); 
} 

$(someSelector).autocomplete(autocompleteOptions); 

在小提琴手,甚至在Firefox的螢火蟲面板來看,我可以看到,JSON返回正確,服務器的響應是200。我甚至已經檢查了創建JSONP腳本片段,其中也包含正確的JSON。但它總是碰到錯誤功能而不是成功的。

我也嘗試過使用complete,並從xhr手動獲取數據,但是responseText和responseXml都是未定義的。包含的錯誤說解析錯誤,但它似乎在語法上是正確的JSON,因爲螢火蟲面板和提琴手都顯示它很好。

HTTP/1.1 200 OK 
Server: ASP.NET Development Server/9.0.0.0 
Date: 28 Jun 2011 11:17:04 GMT 
X-AspNet-Version: 2.0.50727 
X-AspNetMvc-Version: 2.0 
Cache-Control: private 
Content-Type: application/json; charset=utf-8 
Content-Length: 29 
Connection: Close 

[{"id":"1", "somevar":"hello"}] 
+1

你能在問題發佈JSON?如果你得到一個「解析錯誤」,必須有一個原因... – Pointy

+0

如果它有幫助,將原始輸出添加到我的原始帖子 – somemvcperson

+0

當AJAX呼叫完成時,你在警告框中看到什麼?還是不警覺? – MoarCodePlz

回答

5

這JSON是不正確的,

[{"id":"1", somevar:"hello"}]

需求是

[{"id":"1", "somevar":"hello"}]

JSON需要雙引號。

http://jsfiddle.net/robert/Y6ypV/

值可以是在雙引號的字符串或數字,或真或假或爲空,或物體或陣列。這些結構可以嵌套。

採取來源:http://www.json.org/

+0

對不起,錯字,只是複製打字從其他機器,它確實包含在另一臺機器上的數據周圍的報價。將更新我的文章。 – somemvcperson

+0

http://jsonlint.com/是偉大的json驗證程序 - 今天一直在使用它:-) –

+0

我不知道有一個jsonlint,我在我的構建管道中使用jslint ...將去檢查那裏的json。 .. *編輯*有效的json – somemvcperson