这真的让我抓我的头。也就是说,它只发生在IE,而不是Firefox,我的印象是,jQuery是有效的浏览器中立。我在过去几个小时里一直在这个东西开裂,并且已经钉住了,至少,发生了什么。
这个jqGrid:
$("#DocumentListByPartRecordsGrid").jqGrid( { datatype: 'local',colNames: ['<b>Id</b>','<b>Document Name</b>','<b>Document Type</b>','<b>Effective Date</b>','<b>Expiration Date</b>','<b>Delete</b>'],colModel: [ { name: 'ASSOCIATION_ID',Index: 'ASSOCIATION_ID',resizable: true,align: 'left',hidden: true,sortable: false },{ name: 'FILE_NAME',Index: 'FILE_NAME',sortable: false,width:'20%' },{ name: 'DOCUMENT_TYPE',Index: 'DOCUMENT_TYPE',{ name: 'EFFECTIVE_DATE',Index: 'EFFECTIVE_DATE',{ name: 'EXPIRATION_DATE',Index: 'EXPIRATION_DATE',{ name: 'Delete',Index: 'Delete',align: 'center',],rowNum: 15,rowList: [15,50,100],imgpath: '/Drm/Content/jqGrid/steel/images',viewrecords: true,height: 162,loadui: 'block',forceFit: true });
填写此功能:
var mydata = ''; <% if(!string.IsNullOrEmpty(Model.PCAssociatedDocuments)) { %> var mydata = <%= Model.PCAssociatedDocuments %>; <% } %> for (var i = 0; i <= mydata.length; i++){ jQuery("#DocumentListByPartRecordsGrid").addRowData(i,mydata[i],"last"); }
这是从模型干净地填充。这不是问题。使用删除功能时会出现此问题,它在控制器中格式化为:
<a class='deleteAttachment' style='cursor: pointer;' href='#' onclick='javascript:PCDocumentDelete(" + s.AssociationId.ToString() + "," + pcId + ");'>Delete</a>
function PCDocumentDelete(id,pcid) { if (confirm("Are you sure you want to delete this document?")) { $.blockUI({ message: "Working...",css: { background: '#e7f2f7',padding: 10 } }); $.ajax( { url: '/DRM/Pc/DeleteAssociation?associationId=' + id + '&pcid=' + pcid,async: true,dataType: "json",success: function(result) { if (result.Success == true) { //Reload grid $.ajax({ async: false }); $("#DocumentListByPartRecordsGrid").setGridParam({ url: "/Drm/Pc/DeAssociatePartRecordsWithDocument?pcid=" + pcid,datatype: 'json',myType: 'GET',page: 1 }); $("#DocumentListByPartRecordsGrid").trigger("reloadGrid"); $.unblockUI(); $.showGlobalMessage('Specified document has been successfully disassociated from this part record.'); } else { $.unblockUI(); $.showGlobalMessage('An error occurred deleting the attachment.'); } },error: function(res,stat) { alert(res.toString()); alert(stat.toString()); } }); return false; } else { return false; }
}}
(showGlobalMessage是一个内部函数,创建一个特别格式化的blockUI)
ajax在控制器中调用一个方法,但是在我们把它做得很远之前就出现了问题,所以除非有人认为它很重要,否则我不会发布该代码。发生什么,经常由于莫名的原因,调用PC / DeleteAssociation的第一个ajax突发返回304(未修改)响应。我知道发生在一个get当没有什么改变,需要刷新。但这不是一个get,它应该被视为一个职位,我的印象是,jquery.ajax设计,除非另有指示,不产生304反应。我显然缺少这里的东西,并一直盯着它太长时间赶上自己。任何人看到我错过了什么?谢谢。
解决方法
我看不到,你指定ajax请求作为POST。所以基本上添加:
$.ajax({ type: 'POST' });
如果仍然失败(由于一些浏览器AJAX奇怪),你可以尝试设置cache:false:
$.ajax({ type: 'POST',cache: false });
Btw,所有缓存:false,正在向请求URL添加一些随机内容。
编辑1:
关于
… and I was under the impression that
@H_301_46@
jquery.ajax was designed to,unless
otherwise instructed,not generate 304
responsesjQuery不会在这里生成任何响应。而304标头只是一个HTTP标头。 HTTP AJAX请求是普通的HTTP请求,可能返回任何有效的头。如果服务器用304响应,则XHR对象将简单地服务于来自服务器的本地缓存的响应。它是完全透明的用户,虽然。
EDIT2:
删除了有关阻止缓存的建议。看起来像Voodoo对我。
编辑3:
添加该位,因为它显然是必要的。看看网络,IE似乎是非法缓存AJAX POSTs在一定程度上。