jQueryAjax在这里返回了什么?
我正在尝试编写ajax用户搜索。我有以下文本字段:jQueryAjax在这里返回了什么?,jquery,asp.net-mvc-4,Jquery,Asp.net Mvc 4,我正在尝试编写ajax用户搜索。我有以下文本字段: <input type="text" id="userSearch" class="search-query" placeholder="Search"> 以下是UserController和Application和Repository类: [HttpGet] public ActionResult SearchUsers(string displayName) { return Json(userApp.GetUserB
<input type="text" id="userSearch" class="search-query" placeholder="Search">
以下是UserController
和Application
和Repository
类:
[HttpGet]
public ActionResult SearchUsers(string displayName)
{
return Json(userApp.GetUserBySearch(displayName), JsonRequestBehavior.AllowGet);
}
public List<User> GetUserBySearch(string displayName)
{
return userRepo.GetUserBySearch(displayName);
}
public List<User> GetUserBySearch(string displayName)
{
return context.Users.Include("Group").Where(u => u.DisplayName.Contains(displayName)).ToList();
}
[HttpGet]
public ActionResult SearchUsers(字符串显示名称)
{
返回Json(userApp.GetUserBySearch(displayName),JsonRequestBehavior.AllowGet);
}
公共列表GetUserBySearch(字符串显示名称)
{
返回userRepo.GetUserBySearch(displayName);
}
公共列表GetUserBySearch(字符串显示名称)
{
返回context.Users.Include(“组”).Where(u=>u.DisplayName.Contains(DisplayName)).ToList();
}
但这根本不起作用。它根本不发出警报。那它意味着什么?它意味着数据为空且不为空?!
我也试过:
var i = 0;
for (i = 0; i <= data.length; i++) {
alert(data[i].UserId);
}
var i=0;
对于(i=0;i,我建议使用来测试浏览器和服务器之间发生了什么
我还建议像这样使用.ajax,它允许您更明确地捕获服务器上发生的错误:
var URL = 'yourURLGoesHere';
$.ajax({
url: URL, type: "post", data: yourdata, dataType: 'json', contentType: "application/json",
success: function (data, status, jqXHR) {
console.log('status:', status);
console.log('jqXHR:', jqXHR);
console.log('data:', data);
if (data) {
//do your OK Stuff
} else {
//do your NOT OK Stuff
}
},
error: function (data, status, jqXHR) {
console.log('responseText:', data.responseText);
//do your error stuff
}
});
更新
看起来主要的问题是如何向服务器发送数据
如果您没有看到500错误的详细信息,则表明您正在使用WebAPI,并且尚未设置它以向您显示错误详细信息。如果是这种情况,这可能会有所帮助
下面是使用.ajax()并将displayName放入querystring中的代码的更新版本—主要优点是您可以捕获错误事件并相应地进行处理
$("#userSearch").keyup(function () {
if ($(this).val().length >= 3) {
var URL = '/User/SearchUsers/?displayName=' + encodeURIComponent($(this).val());
$.ajax({
url: URL, type: "post", dataType: 'json', contentType: "application/json",
success: function (data, status, jqXHR) {
console.log('status:', status);
console.log('jqXHR:', jqXHR);
console.log('data:', data);
if (data) {
//do your OK Stuff
} else {
//do your NOT OK Stuff
}
},
error: function (data, status, jqXHR) {
console.log('responseText:', data.responseText);
//do your error stuff
}
});
}
});
将代码放入ready
事件中
$(document).ready(function(){
$("#userSearch").keyup(function () {
var value = $(this).val();
if (value.length >= 3) {
$.getJSON('/User/SearchUsers', { displayName: value }, function (data) {
if (data == null) {
alert("nothing");
}
else{
alert("OK");
}
});
}
});
});
使用浏览器开发工具中的“网络”选项卡,您可以准确地看到向服务器发送的内容和从服务器接收的内容。(如果您的浏览器没有开发工具,请切换到现代浏览器。IE8+、Chrome、Opera、Safari、Firefox[以及Firebug附加组件]都有开发工具。)使用ajax方法时,我在控制台中收到一个404 Not Found错误,使用我的方法时,它给出一个500内部服务器错误。您认为如何?您使用的是WebAPI还是MVC?在调试模式(F5)下运行代码,并在控制器上设置断点(F9)-观察发生了什么。你安装了Fiddler吗?因为它通过浏览器代理数据,所以通常更容易准确地看到发生了什么。谢谢你为我花费时间。;@HamidReza,你正在向get发送数据(displayName),你是如何从get获取数据的?
$(document).ready(function(){
$("#userSearch").keyup(function () {
var value = $(this).val();
if (value.length >= 3) {
$.getJSON('/User/SearchUsers', { displayName: value }, function (data) {
if (data == null) {
alert("nothing");
}
else{
alert("OK");
}
});
}
});
});