为什么我必须将dataType设置为文本?

时间:2011-05-16 14:57:57

标签: asp.net vb.net jquery

我有以下脚本可以工作,但我不明白为什么当类型设置为json时它不起作用:

了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”...

为什么?

3 个答案:

答案 0 :(得分:2)

如果dataTypejson,则您无需在parseJSON上执行results - 它已经是javascript对象文字。

答案 1 :(得分:1)

尝试在服务器端使用Response.ContentType = "application/json";,在AJAX中使用

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

答案 2 :(得分:0)

我认为应该适合使用 •Response.ContentType =“text / html”;

XML验证并检查HTML,XHTML,SMIL,MathML等Web文档的标记有效性,以符合w3标准。

示例代码:(有错误) protected void Page_Load(object sender,EventArgs e) {     Response.Clear();     Response.ContentType =“text / json”; // ####&lt; - 这应该是'application / json'吗?     回复于(getTabFrame());
    到Response.End(); }

私有字符串getTabFrame() {
    var objStringBuilder = new StringBuilder();     objStringBuilder.Append( “[”);     objStringBuilder.Append( “{\” 键\ “:1,\” 值\ “:\” 默认\ “},”);     objStringBuilder.Append(“{\”key \“:2,\”value \“:\”Reports \“},”);     objStringBuilder.Append( “{\” 键\ “:3,\” 值\ “:\” 其他\ “}”);     objStringBuilder.Append( “]”);     return objStringBuilder.ToString(); }

页面错误输出:

无法显示XML页面 无法使用样式表查看XML输入。请更正错误,然后单击“刷新”按钮,或稍后重试。

在文档的顶层无效。处理资源'http:// localhost:1713 / Default.aspx'时出错。第1行,位置......

[{ “键”:1, “值”: “默认”},{ “键”:2 “值”: “报告”},{ “键”:3 “值”: “其他” }] ^

示例代码:(无错误) protected void Page_Load(object sender,EventArgs e) {     Response.Clear();     Response.ContentType =“text / html”; // ####&lt; - 这不应该是text / html吗? ###
    回复于(getTabFrame());
    到Response.End(); }

私有字符串getTabFrame() {
   var objStringBuilder = new StringBuilder();    objStringBuilder.Append( “[”);    objStringBuilder.Append( “{\” 键\ “:1,\” 值\ “:\” 默认\ “},”);    objStringBuilder.Append(“{\”key \“:2,\”value \“:\”Reports \“},”);    objStringBuilder.Append( “{\” 键\ “:3,\” 值\ “:\” 其他\ “}”);    objStringBuilder.Append( “]”);    return objStringBuilder.ToString(); }

页面输出(无错误):

[{ “键”:1, “值”: “默认”},{ “键”:2 “值”: “报告”},{ “键”:3 “值”: “其他” }]