2011-05-16 105 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”:“其他”}]

相关问题