2013-09-01 7 views
51

Próbowałem wielu rzeczy i nie ma mowy, zawsze pojawia się ten błąd Próbowałem użyć tylko jednej opcji, aby zobaczyć, czy przekazano, zmienił wywołanie jquery, ale nie.błąd składniowy: nieoczekiwany token <

Zajrzałem w różnych miejscach w Internecie na temat tego błędu, ale nie mogłem rozwiązać ani zrozumieć, dlaczego tak się dzieje. Na moim komputerze za pomocą EasyPHP działa idealnie, ale kiedy umieścić w Internecie nie działa.

Błąd składni: niespodziewany żeton <

Oto mój kod:

$(function(){ 
$('#salvar').click(function(){ 
    var key = 'salvar'; 
    var title = $('#title').val(); 
    var opcao1 = $('#opcao1').val(); 
    var opcao2 = $('#opcao2').val(); 
    var opcao3 = $('#opcao3').val(); 
    var opcao4 = $('#opcao4').val(); 
    var opcao5 = $('#opcao5').val(); 
    var opcao6 = $('#opcao6').val(); 

    if(title.length > 0){ 
     if(opcao2.length > 0){ 
      $('#resposta').removeClass().html('Salvando a enquete...<br clear="all"><br><img src="images/switch-loading.gif" />'); 
      $.ajax({ 
      type : 'POST', 
      url : 'funcoes/enquete_adm.php', 
      dataType : 'json', 
      data: {key:key,title:title,opcao1:opcao1,opcao2:opcao2,opcao3:opcao3,opcao4:opcao4,opcao5:opcao5,opcao6:opcao6}, 
      success : function(data){ 
       if(data.sql == 'ok'){ 
         $('#resposta').addClass('success-box').html('Enquete Salva!').fadeIn(1000); 
         $('#control').fadeOut(); 
        }else if(data.sql == 'error'){ 
         $('#resposta').addClass('info-box').html('Ops, aconteceu um erro. Por favor, tente novamente').fadeIn(1000); 
        } 
       }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) {  
       alert("XMLHttpRequest " + XMLHttpRequest[0]);alert(" errorThrown: " + errorThrown);alert(" textstatus : " + textStatus);  
      } 
      }); 
     }else{ 
      $('#resposta').addClass('warning-box').html('É necessário no mínimo duas opções'); 
     }; 
    }else{ 
     $('#resposta').addClass('warning-box').html('Coloque a pergunta da enquete'); 
    }; 
    return false; 

}); 
}); // End 
+0

Czy mówi, który plik na konsoli? – Sergio

+1

błąd powinien dać ci plik i numer linii, opublikować konkretną linię, którą wskazuje. –

+0

Nie pamiętam, gdzie znalazłem błąd. Ale był w php. –

Odpowiedz

12

Masz niepotrzebne ; (średniki):

Przykład tutaj:

}else{ 
     $('#resposta').addClass('warning-box').html('É necessário no mínimo duas opções'); 
    }; 

Końcowy ; po } jest niepoprawny.

Innym przykładem tutaj:

}else{ 
    $('#resposta').addClass('warning-box').html('Coloque a pergunta da enquete'); 
}; 
91

to zwykle bywa, gdy jesteś w tym lub wysyłania do pliku, który nie istnieje. Serwer powróci regularnym formacie HTML "404 Not Found" dołączone

'<html></html>' 

tagów. Ten pierwszy chevron < nie jest prawidłowym js ani prawidłowym jsonem, dlatego wyzwala nieoczekiwany token.

Co się stanie, jeśli spróbujesz zmienić "funcoes/enquete_adm.php" w bezwzględny URL, aby mieć pewność?

+0

Dziwne, ponieważ mam kilka innych poleceń używających JS URL w ten sam sposób i działa idealnie, właśnie podałem ci ten problem. I na moim komputerze działa idealnie, gdy wprowadzone na serwerze nie działa. –

+0

Dzięki. To działało dla mnie. Zignorowałem moje imię pliku js. – lwdthe1

0

Zignoruj ​​parametr podając jako fałszywa w skrypcie java Funkcje

Ex:

function getCities(stateId,locationId=false){  

    // Avoid writting locationId= false kind of statements 
    /*your code comes here*/ 

} 

Unikać pisanie locationId = false rodzaju sprawozdania, ponieważ będzie to dać błąd w Chrome i IE

2

Miałem podobny problem, a moim problemem było to, że wysyłałem javascript, aby wyświetlać komunikaty konsoli.

Nawet gdy przeglądałem plik w przeglądarce (nie za pośrednictwem aplikacji), pokazywałem go dokładnie tak, jak oczekiwałem (np. Dodatkowe znaczniki nie były wyświetlane), ale były wyświetlane w wynikach html/text i próbowali zostać sparsowani.

Mam nadzieję, że to pomoże komuś!

2

Podejrzewam, że jeden z twoich skryptów zawiera source map URL. (Minimum jQuery zawiera na przykład odniesienie do mapy źródłowej.)

Po otwarciu narzędzi dla programistów Chrome Chrome spróbuje pobrać mapę źródłową z adresu URL, aby ułatwić debugowanie. Jednak mapa źródłowa faktycznie nie istnieje na serwerze, ale zamiast tego jest wysyłana zwykła strona 404 zawierająca kod HTML.

0

Tylko rzucę to tutaj, ponieważ napotkałem ten sam błąd, ale z BARDZO różnych powodów.

Podaję za pośrednictwem węzła/ekspresu/jade i przeportowałem stary plik jade. Jedna z linii było nie bork gdy Typekit failed:

script(type='text/javascript') 
    try{Typekit.load();}catch(e){} 

Wydawało się dość niewinnie, ale w końcu zrozumiał, że dla jade bloków skryptu gdzie jesteś dodawanie treści trzeba .:

script(type='text/javascript'). 
    try{Typekit.load();}catch(e){} 

Proste, ale trudne.

1

Ten błąd może również wynikać z wywołania JSON AJAX do skryptu PHP, który ma błąd w kodzie. Serwery są często konfigurowane w celu zwracania informacji o błędach PHP sformatowanych przy pomocy znaczników HTML. Ta odpowiedź jest interpretowana jako niepoprawny JSON, co powoduje "nieoczekiwany błąd" AJAX < "tokenu.

Aby wyświetlić błąd PHP za pomocą Chrome, przejdź do panelu Sieć w inspektorze sieciowym, kliknij plik PHP wymieniony po lewej stronie i kliknij kartę Odpowiedź.

1

Podczas księgowania za pośrednictwem ajax, to zawsze dobry pomysł, aby najpierw złożyć normalnie, aby zapewnić plik, który nazywa się zawsze powrocie prawidłowych danych (json) i nie błędy z html tagów lub innego

<form action="path/to/file.php" id="ajaxformx"> 

Dodając X do wartości id, jquery jej nie przetworzy.

Gdy jesteś pewien, że wszystko jest w porządku, po czym wyjąć x od id="ajaxform" a pusta wartość atrybutu action

To jak ja klasyfikowane ten sam błąd za sobą zaledwie kilka minut temu :)

6

I podejrzewam dostajesz kodowanie text/html w odpowiedzi na żądanie, więc wierzę, że problem jest:

dataType : 'json', 

spróbuj zmienić go

dataType : 'html', 

Od http://api.jquery.com/jQuery.get/:

dataType Typ: String typ danych oczekiwanych z serwera. Domyślnie: Intelligent Guess (xml, json, script lub html).

+0

Niech Cię Bóg błogosławi w obfitości. Uratowałeś mnie po 12 godzinach poszukiwań! – user1930402

1

Miałem także syntax error: unexpected token < podczas wysyłania formularza za pośrednictwem ajax. Następnie użyłem curl, aby zobaczyć co zwraca:

curl -X POST --data "firstName=a&lastName=a&[email protected]&pass=aaaa&mobile=12345678901&nID=123456789123456789&age=22&prof=xfd" http://handymama.co/CustomerRegistration.php 

mam coś takiego jak odpowiedź:

<br /> 
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>3</b><br /> 
<br /> 
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>4</b><br /> 
<br /> 
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>7</b><br /> 
<br /> 
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>8</b><br /> 

Więc wszystko, co musiałem zrobić, to zmienić poziomu log tylko do błędów zamiast ostrzeżenie.

error_reporting(E_ERROR); 
0

Stało się to ze stroną załadowaną za pomocą elementu iframe. Strona src iframe miała odniesienie do skryptu 404.Oczywiście nie mogłem znaleźć odniesienia do skryptu na stronie nadrzędnej, więc znalezienie winnego zajęło mi trochę czasu.

4

Błąd SyntaxError: Unexpected token < prawdopodobnie oznacza punkt końcowy API nie powrócić JSON w treści dokumentu, takich jak wynika z 404.

W tym przypadku oczekuje się znaleźć { (początek JSON); zamiast tego znajduje < (początek elementu nagłówka).

Udane odpowiedź:

<html> 
    <head></head> 
    <body> 
    {"foo": "bar", "baz": "qux"} 
    </body> 
</html> 

not-found odpowiedź:

<html> 
    <head></head> 
    <body> 
    <h1>Not Found</h1> 
    <p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p> 
    </body> 
</html> 

Spróbuj odwiedzić adres URL punktu końcowego danych w przeglądarce, aby zobaczyć, co się wrócił.

+0

Awesome! Dzięki. – mendez7

0

upewnij się, że nie są w tym kod jquery między

< script> </script>

Jeśli więc usunąć i że kod będzie działać dobrze, on pracował w moim przypadku.

1

Sprawdziłem wszystko wliczone JS Ścieżki

Przykład Zmień to

<script src="js/bootstrap.min.js" type="text/javascript"></script> 

DO

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" type="text/javascript"></script> 
1

Usunięcie tej linii z mojego kodu rozwiązać mój problem.

header("Content-Type: application/json; charset=UTF-8");