2013-04-20 15 views
6

Chcę wykonać AJAX POST w moim widoku MVC. Pisałem następujące:Sterownik AJAX POST na MVC pokazujący błąd 302

kod skryptu w widoku

$('#media-search').click(function() { 
    var data = { key: $('#search-query').val() }; 

    $.ajax({ 
     type: 'POST', 
     url: '/Builder/Search', 
     data: JSON.stringify(data), 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     success: function (data) { 
      $('.builder').empty(); 
       alert("Key Passed Successfully!!!"); 
     } 
    }); 
}); 

kod kontrolera

[HttpPost] 
public ActionResult Search(string key) 
{ 
    return RedirectToAction("Simple", new { key=key }); 
} 

Ale na AJAX POST otrzymuję 302 znaleziono błąd

Odpowiedz

7

Kod odpowiedzi "302" to redir ct. Twoje działanie kontrolera wyraźnie zwraca wartość RedirectToAction, która po prostu zwraca wartość 302. Ponieważ ta instrukcja przekierowania jest używana przez twoje wywołanie AJAX, a nie bezpośrednio przez przeglądarkę, jeśli chcesz, aby Twoja przeglądarka była przekierowywana, musisz wykonać następujące czynności:

$.ajax({ 
    type: 'POST', 
    url: '/Builder/Search', 
    data: JSON.stringify(data), 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    success: function (data) { 
      if (data.redirect) { 
       window.location.href = data.redirect; 
      } 
      $('.builder').empty(); 
      alert("Key Passed Successfully!!!"); 
    } 
}); 

Jeśli nie, musisz zwrócić coś bardziej znaczącego niż instrukcja przekierowania ze sterownika.

+0

Nie chcę przekierowywać na inną stronę. Chcę tylko zwrócić niektóre dane z działania kontrolera w MVC. –

+0

Wtedy nie powinieneś zwracać 'RedirectToAction', która po prostu zwraca przekierowanie 302 do innego adresu URL. –

+0

to co powinienem zrobić, aby po prostu zwrócić wartości Json do widoku? –