2011-11-10 2 views
0

J'ai la JS suivante:jQuery getJSON avec JsonResult mvc

$('form').live('submit', function (event) { 

        // Stop the form from doing a native postback 
        event.preventDefault(); 

        $.ajax({ 
         type: 'POST', 
         timeout: 5000, 
         url: $(this).attr('action'), 
         data: $('form').serialize(), 
         success: function (responseHtml) { 

          $.getJSON($(this).attr('action'), function (data) { 

           console.log(data); 

          }); 

         }, 
         error: function (jqXHR, textStatus, errorThrown) { 

          alert('server error'); 

         } 
        }); 
       }); 

qui devrait enregistrer la JSON de la méthode mvc suivante sur Fail (noter que ceci est une connexion échoue et pas l'erreur ajax!):

[HttpPost] 
     public JsonResult Login(User user, string returnUrl) 
     { 
      // Validate the email and password 
      if (users.Login(user.UserName, user.Password, Request.UserHostAddress)) 
      { 
       FormsAuthentication.SetAuthCookie(user.UserName, true); 

       // build redirectUrl ... 
       //var redirUrl = ... 
       return Json(new { uservalidated = true, url = false }); 
      } 
      else 
      { 
       return Json (new { uservalidated = false, url = false }); 
      } 
     } 

Si je désactive la JS alors je vois le résultat bien, mais pour une raison quelconque la JS ne peut pas le voir:/

+0

Avez-vous essayé sans 'returnUrl'? –

Répondre

1

pense que vous devez avoir JsonRequestBehavior.All owGet là

return Json(....., JsonRequestBehavior.AllowGet); 

aussi:

Si vous utilisez Chrome appuyez sur F12 et réseau, Firebug dans Firefox, et voyez si vous obtenez 404, 500 ou des erreurs similaires qui pourraient expliquer pourquoi rien ne se passe.

1

$(this) n'est pas ce que vous pensez dans la méthode de réussite (parce qu'il est un rappel et court hors de portée) ..

Vous devez stocker une référence à this pour créer une fermeture

$('form').live('submit', function (event) { 
     // Stop the form from doing a native postback 
     event.preventDefault(); 
     var self = this; // add this so you have a reference to this in callbacks 
     $.ajax({ 
      type: 'POST', 
      timeout: 5000, 
      url: $(this).attr('action'), 
      data: $('form').serialize(), 
      success: function (responseHtml) { 

       $.getJSON($(self).attr('action') , function (data) { 

        console.log(data); 

       }); 

      }, 
      error: function (jqXHR, textStatus, errorThrown) { 

       alert('server error'); 

      } 
     }); 
    }); 
Questions connexes