Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除记录时未找到元素_Javascript_Jquery_Asp.net Mvc_Firefox_Jqgrid - Fatal编程技术网

Javascript 删除记录时未找到元素

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,

JqGrid 4.6

一切正常。唯一的问题是,当我打开Firefox调试器并转到控制台时。如果我删除一条记录(单击垃圾箱图标,然后弹出删除对话框,单击删除按钮,页面刷新等),调试器会警告我

找不到元素

可能的脚本包括:

$(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:我在中使用了响应的原始视图,但在中使用了相同的视图