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());
    }
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top