2016-08-05 17 views
0

Ich habe einige jQuery Scripting, die AJAX verwendet, um zurück zu einem Controller, aber der Controller wird nie getroffen. Es gibt eine Art Fehler von meinem AJAX-Anruf, aber es geht zu schnell vorbei und ich kann es nicht lesen.MVC4 jQuery AJAX Postback nie Controller-Aktion

Mein AJAX:

function ValidateByBASFID(basfID) { 
    $.ajax({ 
     url: 'AJAX/ValidateByBASFID', 
     data: '{"BASFID":"' + basfID + '"}', 
     type: 'POST', 
     dataType: 'json', 
     success: function (result) { 
      if (result) 
       return true; 
      else { 
       $("#txtBASFIDError").html("Invalid BASF ID"); 
       return false; 
      }; 
     }, 
     error: function (result) { 
      alert("An error occured. \nStatus: " + result.status 
          + "\nStatus Text: " + result.statusText 
          + "\nError Result: " + result); 
     } 
    }); 
}; 

Mein Controller:

namespace Section_Signup.Controllers 
{ 
    public class AJAXController : Controller 
    { 
     [HttpPost] 
     public JsonResult ValidateByBASFID(string BASFID) 
     { 
      Models.Repositories.SectionRepository _repository = new Models.Repositories.SectionRepository(); 
      MemberVM Member = _repository.GetMemberByBASFID(BASFID); 

      if (Member != null) 
       return Json(true); 
      else 
       return Json(false); 
     } 
    } 
} 

Wenn ich innerhalb der Controller-Aktion einen Haltepunkt setzen nur, es ist nie getroffen.

+0

Nur 'Daten: {BASFID: basfID},' –

+0

Danke Stephen aber ich habe mit meinem AJAX-Aufruf keinerlei Daten zurücksenden (zu einer Dummy-Controller-Aktion habe ich mich für den Test eingerichtet) und trotzdem die Controlleraktion nie gemacht wird getroffen. – BKahuna

+0

Und welche Fehler bekommen Sie in der Browser-Konsole? (Sie sollten 'url: '@ Url.Action (" ValidateByBASFID "," AJAX ") verwenden, so dass die URL korrekt ist, und es muss auch gemäß meinem ersten Kommentar sein, außer Sie setzen auch den' contentType: 'json'-Option) –

Antwort

0

Es stellt sich heraus, dass das Problem mit der asynchronen Natur von AJAX war. Ich habe meinen AJAX-Rückruf mit einem Absenden-Button verbunden und versucht, eine ID zu bestätigen. Wenn es ungültig wäre, würde ich false zurückgeben, um die Übermittlung zu "annullieren".

Die Sache ist, dass das Skript nicht auf die Antwort warten würde, um zurückzukommen und würde das Formular direkt nach dem AJAX-Aufruf senden. Wenn es später falsch zurückkam, war es zu spät und es würde die seltsamen Fehler werfen.

Ich habe meine AJAX verändert wie folgt zu lesen:

function ValidateByBASFID(basfID) { 
    $.ajax({ 
     url: 'AJAX/ValidateByBASFID', 
     data: { BASFID: basfID }, 
     type: 'POST', 
     dataType: 'json', 
     success: function (result) { 
      if (result) 
       $('form#formBASFID').submit(); 
      else { 
       $("#txtBASFIDError").html("Invalid BASF ID"); 
      } 
     }, 
     error: function (result) { 
      alert("An error occured. \nStatus: " + result.status 
          + "\nStatus Text: " + result.statusText 
          + "\nError Result: " + result); 
     } 
    }); 
}; 

Die Funktion, die diese AJAX Rückrufe gibt false zurück, um das jedes Mal legt die einreichen abzubrechen. Es sieht wie folgt aus:

$("#btnBASFID").click(function() { 
    var basfID = $("#txtBASFID").val(); 
    ValidateByBASFID(basfID); 
    return false; 
}); 

Wenn anschließend diese AJAX zurückgibt, dass die ID gültig war, senden Sie eine wieder verarbeitet wird.