2011-05-16 100 views
0

我有以下腳本作品,但我不明白爲什麼當類型設置爲JSON它不會工作:爲什麼我必須將dataType設置爲文本?

Serverside集團:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    Response.Clear() 
    Response.ContentType = "text/plain" '//#### <- should't this be text/json? ### 
    Response.Write(getTabFrame()) 
    Response.End() 
End Sub 

Function getTabFrame() As String 
    objStringBuilder = New StringBuilder() 

    objStringBuilder.Append("[") 

    objStringBuilder.Append("{""key"":1,""value"":""Default""},") 
    objStringBuilder.Append("{""key"":2,""value"":""Reports""},") 
    objStringBuilder.Append("{""key"":3,""value"":""Other""}") 

    objStringBuilder.Append("]") 

    Return objStringBuilder.ToString 
End Function 

客戶方:

$.ajax({ 
    url: 'serverside', 
    type: 'GET', 
    dataType: 'text', //#### <------------------------ shouldn't this be json? ### 
    error: function(xhr, status, error) { 
     alert('Error: ' + status + '\nError Text: ' + error + '\nResponse Text: ' + xhr.responseText); 
    }, 
    success: function(results) { 
     var obj = jQuery.parseJSON(results); 
     var len = obj.length; 

     for(i=0; i<len; i++) { 
      $("#tabs").tabs("add","tabs.aspx?tab=" + obj[i].key, obj[i].value) 
     }; 
    } 
}); 

當我將這些值更改爲json時,整件事停止工作並返回「null」...

爲什麼?

+2

您可以發佈樣本回復嗎?你不必'parseJSON()',當你指定'json'的'dataType'時,jQuery會爲你做。 – 2011-05-16 15:03:12

+1

你嘗試過'application/json'嗎? http://stackoverflow.com/questions/477816/the-right-json-content-type – 2011-05-16 15:04:32

+1

擴大@ no.good的查詢,添加一個'console.log(結果);' – Neal 2011-05-16 15:05:11

回答

2

if dataType is json,你不需要做parseJSONresults - 它已經是一個JavaScript對象字面量。

1

嘗試在服務器端使用Response.ContentType = "application/json";,並在AJAX調用使用

contentType: "application/json; charset=utf-8", 
dataType: "json", 
0

,我認爲它應該是一個適當的使用 •Response.ContentType = 「text/html的」;

XML驗證並檢查HTML,XHTML,SMIL,MathML等Web文檔的標記有效性以符合W3標準。

示例代碼:(有誤差) 保護無效的Page_Load(對象發件人,EventArgs的) { Response.Clear(); Response.ContentType =「text/json」; // #### < - 這不是'application/json'嗎?
Response.Write(getTabFrame());
Response.End(); }

私人字符串getTabFrame() {
變種objStringBuilder =新的StringBuilder(); objStringBuilder.Append(「[」); objStringBuilder.Append(「{\」key \「:1,\」value \「:\」Default \「},」); objStringBuilder.Append(「{\」key \「:2,\」value \「:\」Reports \「},」); objStringBuilder.Append(「{\」key \「:3,\」value \「:\」Other \「}」); objStringBuilder.Append(「]」); return objStringBuilder.ToString(); }

頁錯誤輸出:

的XML頁面無法顯示使用樣式表 無法查看XML輸入。請更正錯誤,然後點擊刷新按鈕,或稍後再試。

在文檔頂層無效。處理資源「http:// localhost:1713/Default.aspx」時出錯。第1行,位置...

[{「key」:1,「value」:「Default」},{「key」:2,「value」:「Reports」},{「key」:3 「值」: 「其他」}] ^

示例代碼:(無差錯) 保護無效的Page_Load(對象發件人,EventArgs的) { 響應。明確(); Response.ContentType =「text/html」; // #### < - 不應該是text/html嗎? ###
Response.Write(getTabFrame());
Response.End(); }

私人字符串getTabFrame() {
變種objStringBuilder =新的StringBuilder(); objStringBuilder.Append(「[」); objStringBuilder.Append(「{\」key \「:1,\」value \「:\」Default \「},」); objStringBuilder.Append(「{\」key \「:2,\」value \「:\」Reports \「},」); objStringBuilder.Append(「{\」key \「:3,\」value \「:\」Other \「}」); objStringBuilder.Append(「]」); return objStringBuilder.ToString(); }

頁輸出(無差錯):

[{ 「鍵」:1, 「值」: 「默認」},{ 「鍵」:2 「值」: 「報告」}, {「key」:3,「value」:「其他」}]

相關問題