Esto realmente me tiene rascándome la cabeza. A saber, porque solo ocurre en IE, no en Firefox, y tenía la impresión de que jQuery era efectivamente neutral para el navegador. Me he estado quejando de esto durante las últimas horas y he descubierto, al menos, lo que está sucediendo.jQuery AJAX produciendo 304 respuestas cuando no debería
Este 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
});
Llenado por esta función:
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");
}
que está poblada limpiamente del modelo. Este no es el problema. El problema surge cuando se utiliza la funcionalidad de eliminación, que se formatea de nuevo en el controlador de este modo:
<a class='deleteAttachment' style='cursor: pointer;' href='#' onclick='javascript:PCDocumentDelete(" + s.AssociationId.ToString() + ", " + pcId + ");'>Delete</a>
y llama a esta función
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 es una función interna que crea un blockUI particularmente formateado)
El ajax llama a un método de nuevo en el controlador, pero el problema surge antes de que lleguemos tan lejos, entonces a menos que eone piensa que es importante, no voy a publicar ese código. Lo que ocurre es que, a menudo por razones inexplicables, el primer estallido de ajax que llama PC/DeleteAssociation vuelve con una respuesta 304 (no modificada). Sé que sucede en un get cuando nada ha cambiado y necesita ser actualizado. Pero esto no es un get, debe tratarse como una publicación, y tenía la impresión de que jquery.ajax estaba diseñado para, a menos que se indique lo contrario, no generar 304 respuestas. Obviamente me falta algo aquí y he estado mirando demasiado tiempo para atraparlo. ¿Alguien ve lo que me perdí? Gracias.
Sí. @guildsbounty, si quieres que una llamada Ajax sea tratada como POST, tendrás que decirlo explícitamente; jQuery.ajax está predeterminado en GET. Se parece un poco a que el método que está llamando espera un GET, sin embargo, dado que está pasando sus parámetros de URL, aunque parece ser una operación de eliminación, lo que parece un poco extraño ... –
extrañamente, el el vudú fue lo que funcionó al final. Incluso la publicación generaba un 304. Utilicé la prevención de almacenamiento en caché y lo arreglé ... gracias por la ayuda. – guildsbounty
@guildsbounty:: d extraño. Miré un poco y IE parece tener problemas allí. Lo edité de nuevo. ¡Gracias por los comentarios! – skarmats