這真的讓我撓了撓頭。也就是說,因爲它只發生在IE瀏覽器中,而不是Firefox,我的印象是jQuery實際上是瀏覽器中立的。過去幾個小時裏我一直在抨擊這件事,至少發現了這件事。jQuery AJAX產生304響應時它不應該
這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', resizable: true, align: 'left', sortable: false, width:'20%' },
{ name: 'DOCUMENT_TYPE', Index: 'DOCUMENT_TYPE', resizable: true, align: 'left', sortable: false, width:'20%' },
{ name: 'EFFECTIVE_DATE', Index: 'EFFECTIVE_DATE', resizable: true, align: 'left', sortable: false, width:'20%' },
{ name: 'EXPIRATION_DATE', Index: 'EXPIRATION_DATE', resizable: true, align: 'left', sortable: false, width:'20%' },
{ name: 'Delete', Index: 'Delete',resizable: true, align: 'center', sortable: false, width:'20%' },
],
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在控制器中調用一個方法,但問題在我們做到這一點之前就出現了,所以除非som一個人認爲這很重要,我不會發布該代碼。會發生什麼是,經常出於不可解釋的原因,第一次調用PC/DeleteAssociation的ajax突然回來了一個304(未修改)的響應。我知道發生在沒有任何變化需要刷新的情況下。但是這不是一個get,它應該被視爲一個帖子,我的印象是jquery.ajax的設計目的是,除非另有指示,否則不會生成304響應。我顯然在這裏失去了一些東西,並且一直盯着它看我自己太久了。有人看到我錯過了什麼?謝謝。
是。 @guildsbounty,如果你想要一個Ajax調用作爲POST,你必須明確地說; jQuery.ajax默認爲GET。它看起來有點像你調用的那個方法期待一個GET,但是,考慮到你正在傳遞它的URL參數,儘管它似乎是一個刪除操作,這似乎有點奇怪...... – 2011-03-31 15:28:32
奇怪的是, Voodoo位是最後的工作。即使這個職位生成了304.我使用緩存預防,並修復它......感謝您的幫助。 – guildsbounty 2011-03-31 17:28:11
@guildsbounty::d怪。我環顧了一下,IE似乎真的有問題。重新編輯它。感謝您的反饋! – skarmats 2011-03-31 17:43:17