Autor Zpráva
nintendo
Profil *
Ahoj, mam problem..
mam tento Json vystup:
{"status":"success","content":"pujdete; nevim kde jste;"}

Ktery je validni ale pokud ho chci rozparsovat, dostanu hlasku unexpected token, ale uz ne jaky..

Zkratka kod uvedeny nize neprojde a ja netusim vubec proc, uz jsem zkousel nahradit entity, zmenit oddelovace slov v content ale nic nefunguje.

objectResult = jQuery.parseJSON(result);
            console.log(objectResult.status);

Diky za kazdou radu
Chamurappi
Profil
Reaguji na nintenda:
Z dodaných informací nejde vyvěštit problém. Prosím o odkaz na živou ukázku.
nintendo
Profil *
TU bohuzel nemuzu nabidnout, je to lokalni aplikace, Json vystup je takovy jaky jsem uvedl. A cela fce. vypada nasledovne.

function editMyTheme(nameOfTheme)
{
    
     console.log("ZKOUSIM EDIOVAT SOUBOR " + nameOfTheme);
    userId = parseInt(localStorage.getItem("user_id"));
    
     jQuery.ajax({
        url : "api/users/editMyTheme?id="+userId+"&theme="+nameOfTheme+"",
        type : "GET",
        success : function(result) {
            console.log('PARAMS editMyTheme SENT');
            objectResult = jQuery.parseJSON(result);
            console.log(objectResult.status);

             if (objectResult.status == "false") {
                
            
                 console.log("SOUBOR SE NEPODARILO NACIST");

                
                 $("#infoMessMyThemes").show();
                $("#infoMessMyThemes h1").text(text['soubor_se_nepodarilo_nacist']);
                
                
                

             }

             if (objectResult.status == "success") {
            
                 // REDIRECT TO USER ACCOUNT PAGE
                
                 $.mobile.changePage("#editThemePage", "slide", false, true);
                
                 objectResult.content
                
                
                 console.log("SOBOR NACTEN, VYPISUJI OTAZKY");
                
                 console.log(objectResult.content);
                
                
                
                
             }

         },
        // IF HTTP RESULT 400 || 404
        error : function(x, e) {

             if (x.status == 0) {
                console
                        .log('You are offline!!\n Please Check Your Network.');
            } else if (x.status == 404) {
                console.log('Requested URL not found.');
            } else if (x.status == 500) {
                console.log('Internel Server Error');
            } else if (e == 'parsererror') {
                console.log('Error.\nParsing JSON Request failed.');
            } else if (e == 'timeout') {
                console.log('Request Time out.');
            } else {
                console.log('Unknow Error.\n' + x.responseText);
            }

         }
    });






    
 }
Kcko
Profil
nintendo:
alert(result.status) Ti nefunguje? (Bez parsování)
nintendo
Profil *
Undefined


To ale je celkem pochopitelne, kdyz se to nerozparsovalo.
Kcko
Profil
nintendo:
Tak pochopitelné to celkem není ... => http://jquery.jslab.net/zkousecka/#4134756d3fb66f809d26a10eb02e47c3
nintendo
Profil *
Tak ja to nechapu, pokud zkusim toto:
console.log(result);
            var promenna  = result;
            
             alert(promenna.status);    

tak console.log(result) mi vrati json
{"status":"success","content":"pujdete;

 nevim kde jste;"}

ale alert(promenna.status); mi uz vrati undefined, coz by nemelo.

Nerozumim tomu.
Kcko
Profil
alert (typeof result);

Jak to pole skládáš?
nintendo
Profil *
        
echo $result ="{\"status\":\"success\",\"content\":\"$contentOfFile\"}";

a
$contentOfFile = file_get_contents($filename);
Kcko
Profil
nintendo:
$result = array("status" => "test statusu");
echo json_encode($result);

Zkus to takhle a pak bych se zajímal o to co je v tom $contentOfFile
Chamurappi
Profil
Reaguji na nintenda:
Uvnitř zápisu řetězce nesmí být jen tak pohozené zalomení řádku. Musí být buď escapované zpětným lomítkem, nebo nahrazené za escape sekvenci \n (či \r\n).

"api/users/editMyTheme?id="+userId+"&theme="+nameOfTheme+""
Proč nepoužíváš parametr data, který se stará o správné poskládání adresy? Co když bude v nameOfTheme ampersand nebo něco neunicodového? Na každém jménu i hodnotě GET parametru bys měl zavolat encodeURIComponent (což by udělalo jQuery, kdybys použil data, viz dokumentace).

Krom toho funkce jQuery.ajax umí do callbacku poslat už přímo objekt, pokud určíš dataType: "json", nebo (asi) pokud použiješ patřičný MIME typ.
nintendo
Profil *
Chamurappi:
Diky za upozorneni ale bohuzel nemam problem se sestavenim toho URL, ale s response, nastavil jsem spravny MIME type, atd..ale proste nejede, ac jde o validni Json.
Nemohu ho precist ackoliv v jinych funkcnich to pouzivam uplne stejne a jede to O.K.

Nechapu.


Zjistil jsem, ze chyba se tyka spise PHP vypisu:

V souboru mam zapsano toto:
pujdete;
nevim kde jste;

Vypis probiha jak jsme psal drive takto:
$result ="{\"status\":\"success\",\"content\":\"$contentOfFile\"}";

Pokud ponecham uvnitr souboru napr jen slovo:
pujdete

Pak jde vse O.K, pokud pridam vice hodnoto odradkovanych a oddelenych strednikem, jsem na zacatku..
Pritom ale stale zustava JSon validni..

Jak by se toto melo spravne osetrit prosim?
_es
Profil
nintendo:
ale s response, nastavil jsem spravny MIME type, atd..ale proste nejede, ac jde o validni Json.
Nie, nejde, vo vnútri textového reťazca v JS nemôže byť zalomenie riadka, ako to máš v druhom kóde v [#7], ale to ti už bolo vysvetlené v [#11].
nintendo
Profil *
Aha, tak ale tak to spis musim vyresit, z tech dat odebrat to odrazkovani, ale to uz budu muset vyresit na strane serveru jelikoz je to pouze soucast response, nikoliv HTTP request.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: