检查函数是否返回Ajax和WebMethod中的任何数据

时间:2015-02-17 16:04:34

标签: javascript c# asp.net ajax

我开发了以下系统,它在aspx页面上返回无限滚动数据。它运作得非常好。但是,检查数据库是否已到达结束行并且未返回任何数据时,我遇到了一个小问题。

使用以下代码,每当页面滚动到底部时,javascript函数一直在调用webmethod,尽管没有数据要返回。如何检查没有数据以避免那些无意义的函数调用?

$(document).ready(function () {
    var offset = 0;
    var fetch = 30;

function Load() {
        $.ajax({
            type: "POST",
            url: "UserControls/uc_functions.aspx/LoadLatest",
            data: "{offset :" + offset + ", fetch: " + fetch + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                if (data != "") { $('.latest').append(data.d); } 
                else {alert("no data"); completed = true; } //I never get this alert even when there is no data returned from the database
            }
        })
    };

$(window).scroll(function () {
        if ($(window).scrollTop() + $(window).height() > $(document).height() - 10) {
            Load(offset, fetch);
            offset = offset + fetch;
        }
    });
});


[WebMethod]
public static string LoadLatest(int offset, int fetch)
    {  
        var LoadSql = db.Query("Exec dbo.SD_unionServices @0, @1", offset, fetch);");
        foreach (var item in LoadSql)
        { 
           Load_sb.Append(item.title + "<br />"); 
        }

        if(LoadSql.Count() > 0)
        return Load_sb.ToString();
        else
        return string.Empty;
    }

UPDATE 要检查数据是否为空,我使用data.d而不是数据

 if (data.d != "") { $('.latest').append(data.d); }

而不是

 if (data != "") { $('.latest').append(data.d); }

3 个答案:

答案 0 :(得分:2)

当没有可用数据时,改进此选项以返回string.Empty。

public static string LoadLatest(int offset, int fetch)
{  
    var LoadSql = db.Query("Exec dbo.SD_unionServices @0, @1", offset, fetch);");
    foreach (var item in LoadSql)
    { 
       Load_sb.Append(item.title + "<br />"); 
    }

    if(Load_sb.Count() > 0)
       return Load_sb.ToString();
    else
       return string.Empty;

}

答案 1 :(得分:2)

当他指出

时,

Oluwafemi 是对的

  

当没有可用数据时,改进此选项以返回string.Empty。

我还要补充一点,如果您已到达列表的末尾,则不发布数据非常重要。对于网络连接速度慢的人来说,这是有益的:

$(document).ready(function () {
    var offset = 0;
    var fetch = 30;
    var completed = false;

function Load() {
        if (!completed) {
            $.ajax({
                type: "POST",
                url: "UserControls/uc_functions.aspx/LoadLatest",
                data: "{offset :" + offset + ", fetch: " + fetch + "}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    if (data != "") { $('.latest').append(data.d); } 
                    else {alert("no data"); completed = true;} //I never get this alert even when there is no data returned from the database
                }
            });
        }
    };

$(window).scroll(function () {
        if ($(window).scrollTop() + $(window).height() > $(document).height() - 10) {
            Load(offset, fetch);
            offset = offset + fetch;
        }
    });
});

答案 2 :(得分:0)

trim函数删除数据中的所有空格。如果它不能修剪数据,很明显没有数据存在

if (!$.trim(data)){   
    //no data
}
else{   
    //data found!
}