ugrás a tartalomhoz

Ajax hiba

simisoma · Aug. 11. (Sze), 22.53
Sziasztok,

elakadtam teljessen.. Mi lehet a lenti hibaüzenet oka. Teszt rendszeremet tökéletesen fut az Ajax script, de amikor áttöltöm az éles rendszerbe a lenti hibaüzenetet dobja a konzol.

Teszt környezet: Linux | Éles környezet Windows Server

Hibaüzenet:
Uncaught SyntaxError: Unexpected token  in JSON at position 1
at JSON.parse (<anonymous>)
at Object.success (popup_index.php?iframe=iframe_munkalista_add_egyeditermek_v2&id=700829:34)
at i (jquery.js:2)
at Object.fireWith [as resolveWith] (jquery.js:2)
at A (jquery.js:4)
at XMLHttpRequest.<anonymous> (jquery.js:4)

Ajax script:

$(document).ready(function() {
            $('.ellenorzes').on('change', function() {

                    var szelesseg   = $('#szelesseg').val();
                    var hosszusag   = $('#hosszusag').val();
                    var vastagsag   = $('#vastagsag').val();
                    
                    if(vastagsag!="" && szelesseg!="" && hosszusag!="" ){  
                            $.ajax({ 
                                    url: "process.php",
                                    type: "POST",                      
                                    data: {
                                            szelesseg:  szelesseg,
                                            hosszusag:  hosszusag,
                                            vastagsag:  vastagsag      			
                                    },
                                    cache: false,
                                    success: function(dataResult){
                                            var sor = JSON.parse(dataResult);
                                            if(sor.statusCode==200){
                                                    $("#success").show();
                                                    $("#error").hide();
                                                    $('#success').html('Van javasolt ár: ' + sor.javasoltar); 
                                                    $('#egysegar').val(sor.javasoltar)
                                            }
                                            else if(sor.statusCode==201){
                                                    $("#success").hide();
                                                    $("#error").show();
                                                    $('#error').html('Nincs javasolt ár!');
                                                    
                                            }
                                        }       
                                    
                            });
                    }
                    else{
                        $("#success").hide();
                        $("#error").show();
                        $('#error').html('Ár javaslatra kevés adat áll rendelkezésre!');
                    }
            });
    });
PHP amivel számolnék:

include_once 'function.php';

    $JavasoltAr = Arazas($_POST['vastagsag'], $_POST['szelesseg'], $_POST['hosszusag']);

    if($JavasoltAr>0)
    {
        echo json_encode(array("statusCode"=>200, "javasoltar"=> $JavasoltAr));
    }
    else
    {
        echo json_encode(array("statusCode"=>201));
    }
Előre is köszönöm.......
 
1

Csinálj egy olyat, hogy

inf · Aug. 11. (Sze), 23.29
Csinálj egy olyat, hogy console.log(dataResult) mielőtt próbálod parsolni, aztán meglátod, hogy mit ad vissza. Lehet, hogy már eleve parsolja neked a jquery. Nehéz megmondani a kódod alapján, mert nincs HTTP content-type fejléc beállítva, de talán anélkül is felismeri.
2

Szia Inf! Köszi, hogy

simisoma · Aug. 11. (Sze), 23.54
Szia Inf!

Köszi, hogy foglalkozol vele!
Betettem, de nem lett sokkal bővebb az info:


{"statusCode":200,"javasoltar":"12.87"}
VM147:2 Uncaught SyntaxError: Unexpected token  in JSON at position 1
at JSON.parse (<anonymous>)
at Object.success (iframe=iframe_munkalista_add_egyeditermek_v2&id=700829:34)
at i (jquery.js:2)
at Object.fireWith [as resolveWith] (jquery.js:2)
at A (jquery.js:4)
at XMLHttpRequest.<anonymous> (jquery.js:4)


A success részbe tettem a consol.log-ot:

$.ajax({ 
                                    url: "<?php print SITE_LINK;?>include/process/process_index.php?process=javasolt_alapanyag_ar",
                                    type: "POST",                      
                                    data: {
                                            szelesseg:  szelesseg,
                                            hosszusag:  hosszusag,
                                            vastagsag:  vastagsag,
                                            minoseg:    minoseg          			
                                    },
                                    cache: false,
                                    success: function(dataResult){
                                        console.log(dataResult);
                                            var sor = JSON.parse(dataResult);
                                            if(sor.statusCode==200){
                                                    $("#success").show();
                                                    $("#error").hide();
                                                    $('#success').html('Van javasolt ár: ' + sor.javasoltar); 
                                                    $('#egysegar').val(sor.javasoltar)
                                            }
                                            else if(sor.statusCode==201){
                                                    $("#success").hide();
                                                    $("#error").show();
                                                    $('#error').html('Nincs javasolt ár!');
                                                    
                                            }
                                        }       
                                    
                            });
 
A PHP-ban mint fejléc benne van, csak gondoltam a lényeget küldöm:
Így kezdődik a PHP 1-2 sora:

header("Content-Type: text/html; charset=utf-8");
session_start();
3

Ide application/json kéne

inf · Aug. 12. (Cs), 01.41
Ide application/json kéne MIME típusnak, de úgy tűnik így is parsolja a jquery, és a JSON.parse sor szükségtelen. Kommentezd ki, elvileg úgy működnie kéne.
4

:-( Nem megy így sem

simisoma · Aug. 12. (Cs), 06.48
Megadtam a process.php -nek a

header("Content-type: application/json; charset=utf-8");
, de sajnos változatlan a helyzet. És amit végképp nem értek, hogy a teszt rendszeren hibátlan...
10

Csinálj már egy ilyet:

inf · Aug. 12. (Cs), 19.05
Csinálj már egy ilyet: console.log(typeof(dataResult)) Ha mégse object, ahogy sejtem, hanem string, akkor meg talán hex-re alakítva meg lehet tudni, hogy egész pontosan mit kapsz: link A legvalószínűbb ebben az esetben, hogy BOM van a fájljaidnál, ahogy más is írta, és az zavar be.
5

BOM?

Endyl · Aug. 12. (Cs), 07.53
Nem kerül a szerveren valahogy BOM (vagy valami furcsa nem nyomtatható karakter) a json válasz elejére?
6

Nem hiszem

simisoma · Aug. 12. (Cs), 09.28
Erre én is gondoltam és kikerülve minden számítást adtam vissza numerikus 10 eredményt, mindent legyalúlva. :-(

Egyszerűen nem jutok egyről kettőre.... :-(
7

Azt mondod, hogy

Endyl · Aug. 12. (Cs), 11.37
Azt mondod, hogy ellenőrizted, hogy a válasz tényeg csak az 1 és 0 karakterekből áll (length === 2), és úgy sem ment a JSON.parse()? Ezt erősen kétlem, vagy pedig valami nagyon nagy baj van böngésződdel.

Azaz, ha ugyanazok a fejlécek, és byte-ra pontosan ugyanaz a válasz, és ugyanaz a kód, akkor én nem látom, hogy hogyan ne működne. Szóval valamelyik ezek közül nem stimmel.
8

Azt mondom,

simisoma · Aug. 12. (Cs), 12.30
Valami különbség ott kell legyen, hogy az éles rendszer Windows alapú a teszt pedig Linux, mert ugyanabban a böngészőben ugyanaz a kód leszalad a teszten az élesen még a consol-ra sem ír ki eredményt csak ezt:

VM46009:2 Uncaught SyntaxError: Unexpected token  in JSON at position 1
    at JSON.parse (<anonymous>)
    at Object.success (process.php?id=1:34)
    at i (jquery.js:2)
    at Object.fireWith [as resolveWith] (jquery.js:2)
    at A (jquery.js:4)
    at XMLHttpRequest.<anonymous> (jquery.js:4)
9

Saccra azt mondanám, hogy a

mind1 valami név · Aug. 12. (Cs), 18.39
Saccra azt mondanám, hogy a windows szerver iso8859-2 vagy valami más, windows-hoz közeli kódolást használ, a kliensed meg unicode-ot (leginkább utf-8) várna.
Tévedés joga fenntartva.

Javítsatok ki, ha rosszul tudom, de a http headerben a charset nem beállítja a kódolást, hanem jelzi a kliensnek, hogy ilyen kódolást kap. Ha a windows más formátumot használ, akkor is utf8-ként próbálja kezelni és abból már lehet ilyen gubanc. (szerintem)
11

Ascii karaktereknek mindegy

Endyl · Aug. 13. (P), 00.31
Ascii karaktereknek mindegy kéne hogy legyen, nem?
13

Rohadt rég volt, nem

mind1 valami név · Aug. 13. (P), 08.36
Rohadt rég volt, nem emlékszem a pontos körülményekre, de úgy rémlik, hogy nem feltétlenül. Persze tévedhetek.

ui: van még lehetőség valami ingyenes, de legális windows szerver telepítésére, amihez nem kell másik windows? Per pillanat kizárólag linuxaim vannak, nem tudom végigpróbálgatni az eszembe jutó dolgokat és legális windows-t sem szeretek a hálómon, nemhogy illegálist. :)
14

Újra átnézve a topic-ot,

mind1 valami név · Aug. 13. (P), 16.50
Újra átnézve a topic-ot, valószínűleg hülyeség amit írtam, mert hacsak nem gépelt valamit bele a windows szerveren a forráskódba, akkor a kódolásnak illene olyannak maradni, ahogy fel lett másolva.
Vagy nem tudom, már teljesen elvesztettem a fonalat.
12

A JSON.parse()-nak mindegy,

Endyl · Aug. 13. (P), 00.45
A JSON.parse()-nak mindegy, hogy milyen program fut a szerveren, ha byte-ra pontosan ugyanazt a karakterláncot kapja. Tehát a windows szervered valami extrát becsempész a válasz elejére. Derítsd ki, hogy mit, és abból ki lehet deríteni, hogy miért teszi oda.

Vagy a másik lehetőség, amit inf mondott (meg én is, hogy ellenőrizd), csak lehet, hogy átsiklottál rajta: ha eltérőek a két szerveren a válasz fejlécek, akkor az egyiken (windows) lehet, hogy a jQuery automatikusan parse-olja a JSON választ, és utána egy objektumot próbálsz újra átküldeni a parse-oláson, ami nyilván nem fog menni. A találgatás elkerülése érdekében állítsd be a jQuery.ajax() hívásban a dataType-ot json-ra.
15

dataType-ot json

simisoma · Aug. 15. (V), 10.33
Szia,

ahogy a dataType-ot json-ra rakom egyből nem fut le semelyik szerveren sem.

Hogy küld-e speciális karaktert azt hogy tudom kideríteni ebben az esetben?

$(document).ready(function() {
            $('.ellenorzes').on('change', function() {

                    var szelesseg   = $('#szelesseg').val();
                    var hosszusag   = $('#hosszusag').val();
                    var vastagsag   = $('#vastagsag').val();
                    var minoseg     = $('#minoseg').val();
                    
                    if(vastagsag!="" && szelesseg!="" && hosszusag!="" && minoseg!="" && minoseg!="ures"){  
                            $.ajax({ 
                                    dataType: 'json',
//                                    contentType: 'application/json',
                                    url: "<?php print SITE_LINK;?>include/process/process_index.php?process=javasolt_alapanyag_ar",
                                    type: "POST", 
                                    data: {
                                            szelesseg:  szelesseg,
                                            hosszusag:  hosszusag,
                                            vastagsag:  vastagsag,
                                            minoseg:    minoseg          			
                                    },
                                    cache: false,
                                    success: function(dataResult){
                                            var sor = JSON.parse(dataResult);
                                            console.log(sor);
                                            if(sor.statusCode==200){
                                                    $("#success").show();
                                                    $("#error").hide();
                                                    $('#success').html('Van javasolt ár: ' + sor.javasoltar); 
                                                    $('#egysegar').val(sor.javasoltar)
                                            }
                                            else if(sor.statusCode==201){
                                                    $("#success").hide();
                                                    $("#error").show();
                                                    $('#error').html('Nincs javasolt ár!');
                                                    
                                            }
                                            else
                                            {
                                                $("#success").hide();
                                                    $("#error").show();
                                                    $('#error').html('Rossz visszatérő kód!');
                                            }
                                        }       
                                    
                            });
                    }
                    else{
                        $("#success").hide();
                        $("#error").show();
                        $('#error').html('Ár javaslatra kevés adat áll rendelkezésre <i>(Szükséges adatok: Minőség, Lv,SZ,H)</i>!');
                    }
            });
    });
 
17

Én azt csinálnám, hogy

mind1 valami név · Aug. 15. (V), 14.32
Én azt csinálnám, hogy (leginkább linux alól)
wget -O t.json http://teszt-szerver/ajax.php
wget -O e.json http://eles-szerver/ajax.php
(Behelyettesítve a valós URL-ekkel persze ;) )

majd első menetben valami normálisabb szövegszerkesztővel (pl vim) megnézni, esetleg diff segítségével összehasonlítani a kettőt, ha egyik sem hoz eredményt, akkor od -t x1c megmutatja a fájl tartalmát karakteresen és hexában is.

Persze ez csak akkor jó, ha a json fájl tartalmával van gond (pl. nulla hosszúságú?), ha a szerver által küldött header a gond, akkor passz. (Ágyúval verébre: http protokoll, még véletlenül sem https! és wireshark)
18

Mit jelent az, hogy nem fut

Endyl · Aug. 15. (V), 19.07
Mit jelent az, hogy nem fut le egyik szerveren sem? Ha be van állítva a dataType json-ra, akkor nincs szükség a JSON.parse()-ra (ahogy inf már írta), mert a callback-ed már annak az eredményét kapja.

Olvasd el rendesen odafigyelve a dokumentációkat, meg amiket a kérdésedre írnak az emberek!

Ezt a problémát pédául hamar megoldhattad volna, ha elolvasod a jQuery.ajax() dokumentációját, bemásolod a hibaüzenetet a google-ba azzal megtoldva, hogy jquery ajax, vagy a callbacked első sorába berakod, hogy console.log(typeof dataResult).
16

Éles vs teszt böngésző?

mind1 valami név · Aug. 15. (V), 14.25
Közben azon gondolkodtam, hogy egyforma a böngésző az éles és a tesztrendszer alatt?
A jquery verziója azonos?
(Nem értek hozzá, csak találgatok a régi tapasztalatok alapján)