2011-07-07 23 views
6

Mam sytuację, w której wysyłam żądanie posta jquery ajax, ale w mojej aplikacji webowej handler dla tego konkretnego żądania ajax (po przetworzeniu parametrów posta), wywoła akcję w innym kontrolerze (nie na pewno, jeśli nazywa się to przekierowaniem), które zasadniczo renderuje całą stronę witryny (np. odświeżanie strony). Ale widzę, że przeglądarka wyświetla tę samą stronę zamiast odświeżać zawartość nowej strony.Ajax jona i odpowiedź przekierowania z serwera

Czy coś jest nie tak? Jak sobie z tym poradzić?

Musiałem edytować moje pytanie, ponieważ zmieniłem moje wywołanie ajax.

To właśnie kod wygląda następująco:

function chkSubmit(event, actionType) { 


     var msgid = showlst('Please wait ...'); 
     var data = '' 
     if (actionType == 'IAmDone') { 
      var letters = 'e,b,c' 

      data = 'actionType=' + actionType + '&letters=' + letters; 

     } else data = 'actionType=' + actionType; 
     $j.ajax({ 
      type: 'POST',  
      url: context + '/app/handleChk', 
      data: data 
     }); 

     return false; 
} 

Powyższa funkcja działa, gdy przycisk na stronie kliknięciu. Ale ta sama strona wyświetla się. Debugger przeglądarki pokazuje, że otrzymał 200 odpowiedzi OK z nowej akcji, która miała odświeżyć stronę. Używam przeglądarki Chrome i jquery 1.6.1

Przepraszamy za literówkę w przykładowym kodzie. Poprawiłem to.

+0

Czy możesz napisać swój kod? – JamesHalsall

+0

Pomaga pokazać dany kod. – Kon

+0

"var msgid = showlst (" Proszę czekać ... "); var actionType = type" what's type? – MLS

Odpowiedz

7

Serwer nie może zrobić przekierowanie ze związku wniosek ajax. Na końcu ajax angażuje klienta (przeglądarkę). Jeśli chcesz przekierować, możesz to zrobić, ale będzie to musiało zostać wykonane po stronie klienta, w wywołaniu zwrotnym. Możesz to zrobić, zwracając obiekt z serwera, który zawiera adres URL, do którego chcesz przekierować --- możesz wtedy javascript zmienić właściwość lokalizacji dokumentu. Sądzę, że miałoby to sens, gdybyś nie przekierowywał we wszystkich przypadkach lub gdyby twoje połączenie z serwerem było długotrwałe. Jeśli tak nie jest, wywołanie ajax prawdopodobnie nie ma sensu.

+0

Dzięki! Ta odpowiedź działa! – rjc

+0

Moja przyjemność !!!! –

1

Jeśli próbka kodu jest dokładna, zmienia się ponownie parametr actionType na niezdefiniowaną lub ewentualnie zmienną globalną type.

więc wymienić:

function chkSubmit(event, actionType) { 

Z:

function chkSubmit(event, type) { 
2

I mogą być błędne odczytanie pytanie, ale gdzie jest Twój sukces funkcja zwrotna w tym wywołania ajax? Czyli gdzie zazwyczaj czynią wyniki do widzenia, również można użyć wywołania zwrotnego o błędzie, aby uzyskać jakieś dane na temat tego, co, jeśli coś jest nie tak:

function chkSubmit(event, actionType) { 


     var msgid = showlst('Please wait ...'); 
     var actionType = type // per j. tuskan - looks like no such var in scope 
     var data = '' 
     if (actionType == 'IAmDone') { 
      var letters = 'e,b,c' 

      data = 'actionType=' + actionType + '&letters=' + letters; 

     } else data = 'actionType=' + actionType; 
     $j.ajax({ 
      type: 'POST',  
      url: context + '/app/handleChk', 
      data: data, 
      success:function(the_data){ 
       alert("Now I can do stuff with the ajax response which is: "+the_data); 
      } 
     }); 

     return false; 
} 
2

Przykład tego, co zostało powiedziane przez @ek_ny.

jQuery.ajaxSetup({ 
    complete: function (request, textStatus) { 
     // header inserted manually on the server. 
     // you should block the automatic redirect headers 
     // inserted by the server. 
     var location = request.getResponseHeader("Location"); 
     if(location) window.location = location; 
    } 
}); 
+0

Próbowałem Twojego rozwiązania, które wygląda poprawnie, ale nie zadziałało, ponieważ nagłówki HTTP odpowiedzi nie zawierają nagłówka Location. – rjc

+0

W moim przypadku bezpośrednio umieścić pełną: funkcja ... pod ajax request, a nie za pomocą jQuery.ajaxSetup, ponieważ nie wszystkie moje żądanie ajax musi to zrobić. – rjc

+0

Tak jak powiedziałem w odpowiedzi, musisz zidentyfikować żądanie ajax na serwerze i traktować je inaczej, musisz wstawić nagłówek, który ręcznie informuje nowy adres URL. – Thomas

Powiązane problemy