2012-04-22 20 views
15

Używam funkcji jQuery's $.ajax do przesyłania formularza, który działa, ale sukces jest tam, gdzie mam mój problem. Tu jest mój kodu:jQuery AJAX Sukces

$("#form").submit(function() { 
     $.ajax({ 
      type: "POST", 
      url: '/login/spam', 
      data: formData, 
      success: function (dataCheck) { 
       if (dataCheck == 'value') { 
        //Do stuff 
       } 
      } 
     }); 
     return false; 
    }); 

Problem mam jest funkcja if powtarza, że ​​dataCheck nie równy wartość. Wiem, że tak, ponieważ po usunięciu return false; strona wyświetla wartość, zgodnie z oczekiwaniami. Ponadto użyłem wcześniej prawie identycznego kodu, który działa. Czy ktoś może mi doradzić?

+0

Edytowałeś pytanie? co było nie tak z '' 749afa42e6621f10bae17ee00cb1f4de''? – gdoron

+0

Żeby było łatwiej, przypuszczam. – neex1233

Odpowiedz

19

Jak znaleźć odpowiedź samodzielnie:

Umieść debugowania kodu, aby zobaczyć, co można uzyskać z serwera.

$("#form").submit(function() { 
     $.ajax({ 
      type: "POST", 
      url: '/login/spam', 
      data: formData, 
      success: function (dataCheck) { 
       console.log(dataCheck); // <============================== 
       if (dataCheck == 'value') { 
        //Do stuff 
       } 
      } 
     }); 
     return false; 
    }); 

Prawdopodobnie będzie to format inny niż myślisz.

+0

Dobra, spróbuję tego. – neex1233

+2

return false nie działa, jeśli występuje błąd w skrypcie powyżej return false statement. preventDefault ma. Więc wolę, aby nad zwrotem fałsz; http://stackoverflow.com/a/4771084/40521 – Shyju

+0

Należy pamiętać, że jQuery spróbuje wywnioskować typ danych wyniku (ponieważ go nie określasz) na podstawie typu MIME odpowiedzi. Może być konieczne wykonanie oceny w różny sposób w zależności od typu. –

2

Jeśli chcesz zapobiec domyślnemu zachowaniu (w tym przypadku należy przesłać zwykły formularz), użyj preventDefault przez return false; preventDefault zadziała nawet wtedy, gdy wystąpi problem w skrypcie, który jest ponad zwrotną fałszywą instrukcją.

Poniższy kod powinien działać poprawnie.

$("#form").submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     type: "POST", 
     url: '/login/spam', 
     data: formData, 
     success: function (dataCheck) { 
      if (dataCheck == 'value') { 
       //Do stuff 
      } 
     } 
    });  
}); 

Jak wspomniano w gdoronie, użyj konsoli console.debug/alert, aby zobaczyć, jaka wartość znajduje się w zmiennych. Korzystanie z karty Firebug Net/fiddler pomoże ci zrozumieć, jaka odpowiedź uzyskujesz ze strony serwera.

0

To dziwne. Moją radą jest użycie firebuga w firefoxie lub coś innego (np. Opracowanie narzędzi w chrome), aby zobaczyć odpowiedź xhr.

Myślę, że może wynik nieprawidłowego wyniku jest spowodowany błędną odpowiedzią xhr (np. Koperta "749afa42e6621f10bae17ee00cb1f4de" ze znacznikiem html) lub brakiem przestrzeni.

maja, które pomogą Ci :)

0

Wiem, że może to być późno jednak miałem ten sam problem dzisiaj i problem był taki, że prawidłowy ciąg został zwrócony do sukcesu, jednak z jakiegoś powodu miał dodatkowe przełamane postać przed nim. Lokalnie tak się nie stało, jednak kiedy wstawiłem go do sieci, zawsze był dodawany znak nowej linii do zwracanego ciągu (w twoim przypadku dataCheck). Użyłem funkcji substr(), aby pozbyć się nowej linii na końcu i od tego czasu wszystko działało dobrze.

+1

To wygląda na zgadywanie i nie podaje faktów, które mogłyby doprowadzić do logicznego rozwiązania problemu. –

0

if (response.indexOf ("sukces") = - 1) {} spróbować tej metody indexOf()

0

Chyba że dataCheck jest String.Następnie użyj localeCompare()

if (dataCheck.localeCompare('value') == 0) { 
    //Do stuff 
} 
  • Returns -1 jeśli str1 jest sortowana przed str2
  • Returns jeśli dwa ciągi są równe
  • Zwraca jeśli str1 jest posortowane po str2
+0

dzięki za formatowanie tekstu –

Powiązane problemy