Ajax调用认为数据包含[]时应该为空

时间:2015-01-13 14:24:46

标签: javascript jquery ajax asp.net-web-api

我有以下代码获取所有帖子。它有效,但是当没有帖子时它仍然会发送[]作为数据,所以即使数据为空也不会有任何错误。

结果总是以[“Hello”]为例,但[] s'没有在任何地方指定..不知道它们为什么存在。

ajax代码:

 $(document).ready(function() {

        $('#btnGetPosts').click(function() {

            var recieverID = $('#RecieverID').val();

            $.ajax({
                url: "/api/Posts/GetPosts" ,
                data:{username:recieverID},
                type: "GET",
                contentType: "application/json; charset=utf-8",
                dataType: "html",

                 // it always skips error since it thinks that data contains [].
                error: function(request, status, error) {
                   alert("Error, please contact the website administrator");


                },
                 // when there is data it always shows the data like so: ["Hello"]
                success: function(data) {
                    $("#userPosts").append(data).html();

                }
            });
        });
    });

这是我的web-api控制器

public List<string> GetPosts(int userID)
    {


        //// uses linq to get a specific user post (all posts)
        var userPost = PostRepository.GetSpecificUserPosts(userID);

            return userPost;
        }

    }

及以下是我的Repository代码,它从数据库中获取所有帖子。

 public List<string> GetSpecificUserPosts(int user)
    {
        using (var context = new DejtingEntities())
        {
            var result = context.Posts
                .Where(x => x.RecieverID == user)
                .Select(x => x.Body)
                .ToList();

            return result;
        }

2 个答案:

答案 0 :(得分:2)

您将返回ToList()的结果,该结果始终为new List();它永远不会为空。然后通过GetPosts操作将其恢复为字符串,并以[]形式返回到JS代码。

即使您从操作返回null,AJAX代码中的error处理程序也不会被命中,因为将返回200状态代码。 error只有在其他超过200的情况下才会触发。

您可以检查GetSpecificUserPosts中的结果数量,如果没有,则手动返回null,或者您可以检查data.length处理程序中的success $.ajax

答案 1 :(得分:0)

$ .ajax错误处理程序仅在请求(如500错误)期间发生错误时触发。您应该只考虑成功处理程序中的空列表,例如:

success: function(data) {
   if(data.length) {  // if the array has elements then append them
       $('#userPosts').append(data);
   } else {  // If no elements show the alert.
        alert("Error, please contact the website administrator");  
   }
}