我正在使用此函数在Visual Studio 2010中填充表。但是成功函数返回null。在我的网络服务中,我正在使用
Context.Response.Write(js.Serialize(listMsg));
// THIS IS MY JAVA SCRIPT CODE
function getAllMessages() {
$.ajax({
url: "TestService.asmx/GetAllMessages",
dataType: "json",
method: "GET",
contentType: "application/json",
success: function (data) {
var messageTable = $("#messages tbody");
$(data).each(function (index, msg) {
var apnString = "<tr><td>" + msg.ID + "</td><td>" + msg.Email + "</td><td>" + msg.Message + "</td><td>" + msg.TimeStamp + "</td></tr>";
messageTable.append(apnString);
});
},
error: function (err) {
console.log(err);
}
});
这是我的webMethod代码。 Web服务正在返回json数据。
[System.Web.Script.Services.ScriptService]
public class TestService : System.Web.Services.WebService
{
SQLHelper clSQLHelper = new SQLHelper();
[WebMethod]
public void GetAllMessages()
{
List<Messages> listMsg = new List<Messages>();
DataTable dtMsg = clSQLHelper.PGSQLExecuteReader("get_all_messages", new List<NpgsqlParameter>(), "Messages");
if (dtMsg != null && dtMsg.Rows.Count > 0)
{
foreach (DataRow dr in dtMsg.Rows)
{
Messages Msg = new Messages();
Msg.ID = Convert.ToInt32(dr["auto_id"]);
Msg.Email = dr["email_id"].ToString();
Msg.Message = dr["message"].ToString();
Msg.TimeStamp = Convert.ToDateTime(dr["created_on"], new CultureInfo("en-IN"));
listMsg.Add(Msg);
}
JavaScriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(listMsg));
}
}
}
答案 0 :(得分:0)
您提到的代码有两个问题-
1。在网络方法中,您使用的是以下行,因此您不会在ajax中向客户端调用返回任何内容。
Context.Response.Write(js.Serialize(listMsg));
因此,您需要更改方法的定义以返回字符串并返回响应,如下所示-
[WebMethod(Description = "Description")]
[System.Web.Script.Services.ScriptMethod(UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
public string GetAllMessages()
{
List<Messages> listMsg = new List<Messages>();
DataTable dtMsg = clSQLHelper.PGSQLExecuteReader("get_all_messages", new List<NpgsqlParameter>(), "Messages");
if (dtMsg != null && dtMsg.Rows.Count > 0)
{
foreach (DataRow dr in dtMsg.Rows)
{
Messages Msg = new Messages();
Msg.ID = Convert.ToInt32(dr["auto_id"]);
Msg.Email = dr["email_id"].ToString();
Msg.Email = dr["message"].ToString();
Msg.TimeStamp = Convert.ToDateTime(dr["created_on"], new CultureInfo("en-IN"));
listMsg.Add(Msg);
}
}
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize(listMsg);
}
2。您没有告诉ASMX Web方法如何访问该方法
在asmx上调用GET方法时,您需要在网络方法顶部添加以下行
[System.Web.Script.Services.ScriptMethod(UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
上一行的重要性-
此属性用于为可以指定方法的信息指定信息 从客户端脚本调用。该属性使您可以指定哪个HTTP 动词(GET或POST)可用于调用方法。它还可以让您 指定是否使用JavaScript格式化响应 对象符号(JSON)或XML。
以下是其他属性的详细信息-
UseHttpGet
指定是否使用HTTP GET调用该方法 命令。默认值为false。
ResponseFormat
指定将响应序列化为JSON还是XML。 默认值为Json。 ResponseFormat属性可用于指定 该方法返回XmlDocument或 XmlElement对象。