2010-09-12 12 views
5

Mam następujący funkcja JS wyzwalany za pomocą przycisku:JavaScript: Błąd ajaxSubmit

function uploadPicture() { 
    $("form#pictureUpload").ajaxSubmit({ 
     data: $("form#pictureform").serialize(), 
     type: 'post', 
     url: '?action=loadpicture', 
     success: function(response) { 
      $('#div-pictures').html(response); 
     } 
    }); 

}

To działało perfekcyjnie przez kilka miesięcy. Ale przestało działać dzisiaj w Firefoksie, Safari, Chrome i Operze - chociaż nadal działa poprawnie w Internet Explorerze.

Safari daje mi następujący tajemniczy błąd:

Failed to load resource: cancelled  ?action=loadpicture 

Chrome wysyła prawie taki sam (bez : cancelled). Opera i Firefox nie wykazują żadnego błędu. Jedyną dodatkową informacją jest to, że powyższe błędy występują po zakończeniu przesyłania pliku i mimo że serwer generuje dane wyjściowe HTML jako informację zwrotną, która jest ignorowana przez przeglądarki.

Proszę dać mi znać, jeśli masz pomysł, jak to naprawić. Pracuję w kółko od wielu godzin, nawet nie zbliżając się do rozwiązania - po prostu nie widzę błędów w kodzie ani w plikach dziennika. Wielkie dzięki!

+0

Nie znam odpowiedzi, ale kilka pomysłów do zbadania: -Nie myślę, że prawidłowe jest podawanie? Parm = value podczas wykonywania żądania POST. Zwykle, gdy wykonujesz żądanie GET, wszystkie parametry, które podajesz, są w ten sposób dołączane do adresu URL; kiedy POST, wartości są przekazywane jak dane formularza. Spróbuj użyć ukrytego wejścia. Mogę się mylić z tym, być może jest to dozwolone, nawet jeśli nie jest to normalne użycie. - Wygląda na to, że powracasz na tę samą stronę, na której zdefiniowano ten kod, nie wiesz, czy to jest prawidłowe zachowanie czy nie? - Czy używasz innej wersji jQuery niż poprzednio? – RMorrisey

+0

Żadna wersja jQuery nie jest taka sama. Jedyną różnicą, o której wiem, była niewielka aktualizacja Apache i mod-php. – MrG

+0

Czy "? Action = loadpicture" działa tak jak wcześniej? Czy próbowałeś synchronicznie wywoływać ten adres URL? – dmitko

Odpowiedz

5

Zajęło mi to trochę czasu, ale w końcu domyśliłam się. Jeden z naszych adminów dodawanych do konfiguracji Apache:

co spowodowało problem w pewnym przeglądarce powodu użycia iframe opisaną w http://jquery.malsup.com/form/#file-upload. Po zmianie go do następnego wszystko działa ponownie (bez zmian w kodzie!):

Header append X-FRAME-OPTIONS "SAMEORIGIN" 

Zresztą, komunikat o błędzie na Safari & Chrome są tajemnicze. Dziwne zachowanie bez komunikatu o błędzie w innej przeglądarce jest jeszcze gorsze.

+1

Upewnij się, że akceptujesz to, kiedy możesz, później uratuj komuś ból głowy :) –

0

Hmmm nie powinno być w użyciu ciąg kwerendy w URL, ponieważ podczas rozmowy serializacji jej dostanie włączyć dane w kwerendzie nawleczone Spróbuj tego:

$("form#pictureUpload").ajaxSubmit({ 
     data: 'action=loadpicture&'+$("form#pictureform").formSerialize(), 
     type: 'post', 
     success: function(response) { 
      $('#div-pictures').html(response); 
     } 
    }); 
Powiązane problemy