Como é possível que o request.isajaxRequest () seja verdade
-
24-09-2019 - |
Pergunta
Estou tentando testar o jQuery post. Estou postando um formulário e desejo atualizar no Ajax e substituir por um formulário de sucesso em uma div (parece ser um caso de uso comum).
O código a seguir funciona bem no Firefox, mas não no IE.
Uma questão é a do Firefox Request.isajaxRequest () é verdadeiro, mas vindo de IE, Request.isajaxRequest () está retornando falso
NOTA: Coloquei o thread.Sleep na minha ação do controlador como um teste para garantir que eu possa ver o que está acontecendo.
Aqui está o meu código de visualização:
<div id="contact">
<form action="/Tracker/Add" method="post">
<fieldset id="inputbox">
<p>
<label>Today's number</label> <input class="inputText" id="weight" name="weight" type="text" value="208" /></p>
<p><label>Today's Date</label> <input class="inputText" id="datepicker" name="date" type="text" value="03-Mar-2010" /></p>
<p><input type="submit" value="Enter" /></p>
</fieldset>
E aqui está o código JavaScript / JQuery:
<script type="text/javascript" src="../../Scripts/jquery/1.3.2/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#contact form').live('submit', function() {
//$("#Loading").fadeIn(); //show when submitting
$.post($(this).attr('action'), $(this).serialize(), function(data) {
$("#contact").replaceWith($(data));
});
return false;
});
});
</script>
E aqui está minha ação do controlador:
public ActionResult Add()
{
if (if (Request.IsAjaxRequest())
{
//firefox will hit this but IE wont
}
Thread.Sleep(5000);
return PartialView("EntryView", new MyViewModel());
}
Solução
Verifiquei se o seu código (no qual não consegui encontrar um erro) não estava enviando uma solicitação XHR com o JQuery 1.3.2 e o IE 6.0.2900.5512; Atualizando o jQuery para a próxima versão disponível, 1.4.0, corrigiu o comportamento quebrado. Com 1.4.0 (e acima), ou seja, posta o formulário usando Ajax e envia o cabeçalho solicitado por X-With necessário para IsAjaxRequest()
trabalhar. Você pode atualizar o jQuery? Não tive sorte em encontrar o bug/correção específico para isso, mas se você precisar ficar com 1.3.2, posso continuar cavando.
Outras dicas
Adicione o código a seguir, logo após o código jQuery:
jQuery.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}
});
Força o navegador a adicionar o X-requestado com Cabeçalho para todas as solicitações AJAX.
Vale a pena notar que o uso da versão mais recente do jQuery é recomendada, pois existem muitas correções de bugs.
Se não ajudar, inspecione o pedido com Violinista Para ver se o IE envia o cabeçalho ou não.
Parece que há um erro de JavaScript acontecendo no IE que impede de chamar a ação de forma assíncrona. Verifique a presença do cabeçalho HTTP X-Requested-With: XMLHttpRequest
enquanto depura.