我有以下代码获取所有帖子。它有效,但是当没有帖子时它仍然会发送[]作为数据,所以即使数据为空也不会有任何错误。
结果总是以[“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;
}
答案 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");
}
}