Javascript 删除记录时未找到元素
JqGrid 4.6 一切正常。唯一的问题是,当我打开Firefox调试器并转到控制台时。如果我删除一条记录(单击垃圾箱图标,然后弹出删除对话框,单击删除按钮,页面刷新等),调试器会警告我 找不到元素 可能的脚本包括:Javascript 删除记录时未找到元素,javascript,jquery,asp.net-mvc,firefox,jqgrid,Javascript,Jquery,Asp.net Mvc,Firefox,Jqgrid,JqGrid 4.6 一切正常。唯一的问题是,当我打开Firefox调试器并转到控制台时。如果我删除一条记录(单击垃圾箱图标,然后弹出删除对话框,单击删除按钮,页面刷新等),调试器会警告我 找不到元素 可能的脚本包括: $(gridSelector).jqGrid('navGrid', pagerSelector, { //navbar options edit: true,
$(gridSelector).jqGrid('navGrid', pagerSelector,
{
//navbar options
edit: true,
editicon: 'ace-icon fa fa-pencil blue',
add: true,
addicon: 'ace-icon fa fa-plus-circle purple',
del: true,
delicon: 'ace-icon fa fa-trash-o red',
search: true,
searchicon: 'ace-icon fa fa-search orange',
refresh: true,
refreshicon: 'ace-icon fa fa-refresh green',
view: true,
viewicon: 'ace-icon fa fa-search-plus grey',
beforeRefresh: function () {
grid.jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
}
},
{
//delete record form
closeAfterDelete: true,
recreateForm: true,
mtype: 'DELETE',
onclickSubmit: function (params, postdata) {
params.url = API_URL + 'DeleteVendor';
},
beforeShowForm: function (e) {
var form = $(e[0]);
if (form.data('styled')) return false;
form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />');
styleDeleteForm(form);
form.data('styled', true);
return true;
}
}
$(gridSelector).jqGrid('navGrid',pagerSelector,
{
//导航栏选项
编辑:对,
editicon:“王牌图标fa铅笔蓝”,
加:是的,
addicon:“王牌图标fa加上紫色圆圈”,
戴尔:是的,
delicon:“王牌图标fa-fa-trash-o red”,
搜索:对,
搜索图标:“ace图标fa搜索橙色”,
刷新:是的,
刷新图标:“ace图标fa刷新绿色”,
观点:没错,
视图图标:“ace图标fa搜索加灰色”,
beforeRefresh:函数(){
jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid');
}
},
{
//删除记录表格
closeAfterDelete:true,
再现形式:正确,
mtype:“删除”,
onclickSubmit:函数(参数、postdata){
params.url=API_url+“删除供应商”;
},
beforeShowForm:函数(e){
变量形式=$(e[0]);
if(form.data('styled'))返回false;
form.closest('.ui jqdialog').find('.ui jqdialog titlebar').wrapInner('');
样式删除表单(表单);
表单数据('样式化',真);
返回true;
}
}
也
函数样式deleteform(form){
var buttons=form.next().find('.EditButton.fm button');
buttons.addClass('btn btn sm btn white btn round')。查找('[class*=“-icon”]')。隐藏();//用户界面图标,s-icon
按钮.eq(0).addClass('btn-danger').prepend('');
buttons.eq(1).addClass('btn-default').prepend('');
}
虽然错误没有影响我的结果。我找不到警告。我想删除它
编辑:
我在google chrome上试过了。似乎还可以。也许是Firefox中的bug?创建后,可以用来重现“问题”,我可以检查并描述它
要重现问题,需要启动MVC应用程序并使用Firefox作为前端。应该启动集成调试器(通过Ctrl+Shift+S或菜单“工具”/“Web开发人员”/“调试器”)和检查浏览器控制台窗口。该窗口包含许多警告,Firefox怀疑这些警告,但什么是绝对正确的操作,这些警告是绝对不需要的。删除任何一行后,都会看到如下消息
我准确地检查了这个问题,它确实是错误的警告,因为对REST操作的HTTP通信量的错误解释。ASP.NET MVC的删除方法,将void
作为返回值(如public void DeleteProduct(int id)
)生成HTTP响应,如
HTTP/1.1 204 No Content
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcT2xlZ1xEb3dubG9hZHNcUHJvZHVjdFN0b3JlXFByb2R1Y3RTdG9yZVxhcGlccHJvZHVjdHNcNA==?=
X-Powered-By: ASP.NET
Date: Fri, 12 Feb 2016 09:23:51 GMT
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcT2xlZ1xEb3dubG9hZHNcUHJvZHVjdFN0b3JlXFByb2R1Y3RTdG9yZVxhcGlccHJvZHVjdHNcNg==?=
X-Powered-By: ASP.NET
Date: Fri, 12 Feb 2016 09:05:19 GMT
Content-Length: 5
"OK!"
Firefox的错误:它为所有没有正文的HTTP响应显示消息“no element found”。因此,如果状态代码为204
(无内容)或状态代码为200
(确定),但正文为空(存在HTTP头内容长度:0
)然后Firefox怀疑没有找到REST资源,并显示“警告”和文本“未找到元素”
如果您不想看到该消息,则必须在DELETE响应的主体中返回一些数据
public HttpResponseMessage DeleteProduct(int id)
{
bool isDeleted = _repository.Remove(id);
if (!isDeleted) {
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return Request.CreateResponse(HttpStatusCode.OK, "OK!");
}
这会产生如下响应:
HTTP/1.1 204 No Content
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcT2xlZ1xEb3dubG9hZHNcUHJvZHVjdFN0b3JlXFByb2R1Y3RTdG9yZVxhcGlccHJvZHVjdHNcNA==?=
X-Powered-By: ASP.NET
Date: Fri, 12 Feb 2016 09:23:51 GMT
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcT2xlZ1xEb3dubG9hZHNcUHJvZHVjdFN0b3JlXFByb2R1Y3RTdG9yZVxhcGlccHJvZHVjdHNcNg==?=
X-Powered-By: ASP.NET
Date: Fri, 12 Feb 2016 09:05:19 GMT
Content-Length: 5
"OK!"
我个人认为,最好忽略Firefox的“警告”,保留公共httpresponseMessageDeleteProduct(int-id)。我仍然建议您更新用于
interface IProductRepository
{
IEnumerable<Product> GetAll();
Product Get(int id);
Product Add(Product item);
bool Remove(int id);
bool Update(Product item);
}
还有MVC代码
public void DeleteProduct(int id)
{
_repository.Remove(id);
}
将被固定到
public void DeleteProduct(int id)
{
bool isDeleted = _repository.Remove(id);
if (!isDeleted)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
}
我想强调的是,以上所有问题都是纯ASP.NETMVC问题或Firefox问题,与免费jqGrid或jqGrid没有直接关系
您可以下载修改后的项目。
ProductsController.cs
文件包含注释版本的DeleteProduct
,在Firefox中不会产生任何警告。您可以通过将伪文本“OK!”
更改为空字符串”
或其他一些测试来播放代码。Firefox的bug非常古老(它的起源是).分析jqGrid 4.6中的问题毫无意义。您可以使用Firefox开发工具一步一步地调试代码以查找问题,但问题可能已经在jqGrid 4.6的许多更高版本中得到解决。如果您临时更改jqGrid的URL以释放jqGrid 4.12.1或e来自GitHub的最新来源(请参阅)。如果您在免费jqGrid中仍然存在问题,我可以尝试帮助您。@Oleg,使用免费jqGrid 4.12.1,问题仍然存在。是的,我想这是Firefox的问题。有些。您可以准备演示问题的演示吗?例如,只需删除一条或多条记录,不显示任何“未找到元素”消息。@Oleg,这是一个好主意。让我们开始第一步,在存储库中生成演示数据。请参阅。我使用您的免费jqgrid框架,但在寻呼机上看不到一些图标。@Oleg,顺便说一下。web api代码来自再次感谢。很好的帮助。顺便问一下,您是如何找到Http响应信息的,例如Http/1.1 204否内容缓存控制:无缓存Pragma:no Cache
?在F12中,响应为空。我的意思是您使用了哪些工具?Fideler4?@Love:我在中使用了响应的原始视图,但在中使用了相同的视图