为什么我的WebMethod总是返回JSON?

时间:2015-12-11 15:58:04

标签: javascript jquery json ajax

首先,如果这是一个菜鸟问题,我很抱歉,这不是我的区域。

我有一个WebMethod,它返回 String (string table =“”)。但是Ajax返回功能 总是看到JSON对象看起来像{"d":{...}}。我的问题是为什么 我得到了一个JSON,即使我的Ajax期待“文本”?

的WebMethod:

[WebMethod()]
public static string TestAjax(string val)
{
    string sSql = ConfigurationManager.AppSettings["GetMiToSend"];
    sSql = sSql.Replace("$Company$", val);
    string table = "";
    try
    {
        DbCommand command = m_connection.CreateCommand();
        command.CommandText = sSql;
        command.CommandType = CommandType.Text;
        DbDataReader oDataReader = command.ExecuteReader();
        int count = 0;
        if (oDataReader != null)
        {
            count = oDataReader.FieldCount;
        }
        table = "<table>";
        while (oDataReader.Read())
        {
            table += "<tr>";
            for (int i = 0; i < count; i++)
            {
                table += "<td>" + oDataReader.GetValue(i) + "</td>";
            }
            table += "</tr>";
        }
        table += "</table>";
    }
    catch (Exception ex)
    {
        Console.Out.WriteLine(ex.Message);
    }
    return table;
}

我的Ajax功能:

$.ajax({
    type: "POST",
    url: '<%= ResolveUrl("~/Default.aspx/TestAjax") %>',
    data: JSON.stringify(toSend),
    contentType: "application/json; charset=utf-8",
    dataType: "text",
    success: function (data) {
        alert(data);
        $('div#container div#content').html(data.d).show(1000);
        $('div#container div#showContent').hide();
        $('div#container div#content').addClass('rwd-table');
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    }
});

1 个答案:

答案 0 :(得分:1)

我很确定你无法从string返回WebMethod。我没有成功地尝试确认我的断言。因此,请更改代码以返回json而不是string

MS Developer Network: How to: Use the WebMethod Attribute

  

将WebMethod属性附加到Public方法表示您希望将该方法作为XML Web服务的一部分公开。

json

中返回WebMehod
List<object> jsonObject = new List<object>();

jsonObject.Add(new
{
    htmlTable = table
});

return (new JavaScriptSerializer()).Serialize(jsonObject);

更改您的ajax以返回json

dataType: "json"

然后访问你的json对象和你的html表:

var dataParsed = $.parseJSON(data.d);
var htmlTable = dataParsed[0].htmlTable;
// Do your actions with your htmlTable. Append to an element or other action.