jQuery AJAX回发到WebMethod只返回第一行结果

时间:2012-02-07 16:14:20

标签: c# jquery asp.net ajax json

我有以下JQUERY代码,我希望将3个json结果返回到控制台。发生了什么事情我得到了第一次回归结果的3份副本。

所以例如我正在尝试查看文件名,我正在找回“名字,名字,名字”而不是“名字,第二名,第三名”

这是我的代码:

$.ajax({
    type: "POST",
    url: "front.aspx/GetData",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        var obj = msg.d;
        $.each(obj, function(index, value){ 
            console.log(value);    
        });
    }
});

我对每个功能的错误是什么?

我认为你不需要我的CS代码来告诉我我做错了什么,但是你要这样做,这里是:

public class LoadData {
    public string filename;
    public string date;
    public string filetype;
    public Int32 height;
    public Int32 width;
    public string uploadGroup;
    public string title;
    public string uniqueID;
    public string uploader;
    public string uniqueIDnoExt;
}

[WebMethod]
public static List<LoadData> GetData() {
    LoadData b = new LoadData();
    List<LoadData> info = new List<LoadData>();
    SqlDataReader reader;
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    SqlConnection connection = new SqlConnection(connectionString);
    connection.Open();

    SqlCommand command = new SqlCommand("SELECT * FROM uploads ORDER BY id DESC", connection);
    command.Parameters.Add(new SqlParameter("uploader", "anonymous"));

    reader = command.ExecuteReader();

    while (reader.Read()) {
    b.filename = reader.GetString(1);
    b.date = reader.GetSqlDateTime(3).ToString();
    b.filetype = reader.GetString(4);
    b.height = (Int32)reader.GetSqlInt32(5);
    b.width = (Int32)reader.GetSqlInt32(6);
    b.uploadGroup = reader.GetString(7);
    b.title = reader.GetString(8);
    b.uniqueID = reader.GetString(9);
    b.uploader = reader.GetString(10);
    b.uniqueIDnoExt = reader.GetString(12);

    info.Add(b);
    }

    return info;
}

2 个答案:

答案 0 :(得分:3)

移动此行

LoadData b = new LoadData();

在循环中。

while (reader.Read()) {
LoadData b = new LoadData();

b.filename = reader.GetString(1);
b.date = reader.GetSqlDateTime(3).ToString();
b.filetype = reader.GetString(4);
b.height = (Int32)reader.GetSqlInt32(5);
b.width = (Int32)reader.GetSqlInt32(6);
b.uploadGroup = reader.GetString(7);
b.title = reader.GetString(8);
b.uniqueID = reader.GetString(9);
b.uploader = reader.GetString(10);
b.uniqueIDnoExt = reader.GetString(12);

info.Add(b);
}

现在你的方式就是只生成一行数据。 List<>保存引用,不会重新创建它们。因此,如果您没有创建新数据,则不会插入任何新数据(就像现在一样)。你只是在内存中添加第一个,然后更改值。

你也可以阅读: http://en.wikipedia.org/wiki/Linked_list

顺便说一句。

你已经开了许多东西,你很快就会没有资源。在需要关闭的对象上使用using关键字。并且,为了速度,在连接字符串上使用静态字符串(只读)。

答案 1 :(得分:1)

您正在以错误的方式创建列表 ..按照@Aristos方式正确添加对象。

并在您的ajax请求sucess:部分..

循环通过d.data。请检查此JQuery Ajax with Class Arrays

for (var i in d.data) {       }  

你可以Manually convert result dataset to JSON