AJAX php Array sortörés hiba
2015-11-30T01:29:28+01:00
2015-11-30T16:26:17+01:00
2022-07-19T05:21:16+02:00
Miazma
Helló! :) Szeretnék html-t adatbázisba tárolni.

Amit kitaláltam az nem működik:
 - jQ:

$.get('./controller.php', function(data){ $("body").prepend(data); for (x in contentLoad) { alert(x+": "+contentLoad[x]); } ajax_tables(); });
 - PHP:

$result=sql("SELECT * FROM `db` WHERE 1"); $jsArray='var contentLoad = {'; foreach($result as $x => $x_value) { $jsArray .= $x_value['dbID'].":'".$x_value['content']."', "; } $jsArray="<script type='text/javascript'>".substr($jsArray, 0, -2)."};</script>"; echo $jsArray;
Úgy működik, hogy lekérem jQ $.get()-el azt a php fájlt, amelyiknek van hozzáférése az adatbázishoz és készítek belőle vele egy js ombejtum-tömböt, majd visszaküldöm. Utána be prependelem a bodyba és megpróbálom használni.
Már használtam korábban ezt a módszert, hogy array-t adjak vissza js-nek és működött. Már egy órája kerestem a hibát és most végre megtaláltam! Ha van sortörés az echo-ban, akkor nincs alert(). Ha valami egy sorost írok vele, akkor működik! Megpróbáltam most a json-t is - amíg írtam -, de nem sikerült dekódolnom. Szerintem a jQ-nak nem tetszik a dolog, mert a bodyban megjelenik a tömb! :S
Mutasd a teljes hozzászólást!
van erre külön metódus a jQuery-ben, $.getJSON()-el szokás feldolgozni.

szemléltetésképp:

index.php

<html> <head> <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'></script> <script type='text/javascript'> $(document).ready(function(){ /* call the php that has the php array which is json_encoded */ $.getJSON('json_encoded_array.php', function(data) { /* data will hold the php array as a javascript object */ $.each(data, function(key, val) { $('ul').append('<li id="' + key + '">' + val.first_name + ' ' + val.last_name + ' ' + val.email + ' ' + val.age + '</li>'); }); }); }); </script> </head> <body> <ul> </ul> </body> </html>
json_encoded_array.php

<?php //itt nálad az előző példa szerint db-ből jönnek az adatok, aszerint át kell írni $arr = array( array( "first_name" => "Darian", "last_name" => "Brown", "age" => "28", "email" => "darianbr@example.com" ), array( "first_name" => "John", "last_name" => "Doe", "age" => "47", "email" => "john_doe@example.com" ) ); echo json_encode($arr); ?>
p.s. fentebb látom a nagy gyorsaságomban hülyeséget írtam az echo-val kapcsolatban.
Ez alapján már mennie kell...
Mutasd a teljes hozzászólást!

  • Csak kérdés: Az echo sortörés az  "<br>"  vagy  "\n"  a kódban?
    Mutasd a teljes hozzászólást!
  • Első ránézésre ami szembetűnő, hogy olyan, mintha fel akarnád találni a kereket.
    Ha js által értelmezhető objektumot szeretnél előállítani szerver oldalon, használd az erre kitalált elemet (json_encode()), ne pedig ebben a formában próbáld meg összerakni.

    Ha mégis maradsz ennél a megoldásnál, érdemes lenne BOM nélkül menteni mindent, lehet egy white space okozza.
    Mutasd a teljes hozzászólást!
  • Sima enter, úgyhogy /n az biztos van benne! :)
    Mutasd a teljes hozzászólást!
  • PHP-ba betettem egy echo json_encode($result);-ot, de mikor megérkezett az array és be akartam szúrni a body elejére nem akart sehogy sem összeállni az eredeti adatokká. Visszatérésnél próbáltam datatype:json-nal elkapni és próbáltam .parseJSON-al is. Sok törlés, frissítés és próbálkozás után már nem tudom miket csináltam vagy miket nem.

    Nem ragaszkodom ehhez a módszerhez! :D Sőt... lehet, hogy megérettem egy w3s json-ra! :D Szívesen csinálnék valami ortodoxot! :D Például ha anno, amikor írtam a html-t vegyesen használtam volna a dupla és a szimpla aposztrófot is gondban lennék...

    Per pillanat kézzel betöltöttem a html részt az adatbázisba és "dinamikusan" - eseményre... nem php-t beszúrva, mert jó lenne később frissíteni őket lapfrissítés nélkül - szeretném visszakapni ezeket a kis kártyákat... Bármi jobbra át tudok még állni!
    Mutasd a teljes hozzászólást!
  • PHP-ba betettem egy echo json_encode($result);-ot, de mikor megérkezett az array és be akartam szúrni a body elejére nem akart sehogy sem összeállni az eredeti adatokká

    json-t nem echo-val iratunk ki és akkor, amikor már létrejött. Íme egy egyszerű példa rá és megtörtént az adatok konverziója:

    $sth = mysqli_query("SELECT ..."); $rows = array(); while($r = mysqli_fetch_assoc($sth)) { $rows[] = $r; } print json_encode($rows);
    Mutasd a teljes hozzászólást!
  • Sima enter, úgyhogy /n az biztos van benne

    Akkor az echo $valami."\n"; és az echo $valami."/n"; ugyan azt jelenti?
    És ha "ez(ek)" kerülnek be egy json-tömb valamelyik elemébe adatként, egyformán kezelhetőek?
    Bár az is lehet, hogy az én ismereteim nagyon hiányosak...
    Mutasd a teljes hozzászólást!
  • \n. Láttam, hogy elírtam, de akkor már elküldtem a 2. válaszomat és akkor már nem tudtam javítani.
    Megjelent a <script> a js tömbbel a body elején és ha olyan volt a tömb elem, amiben volt sortörés, akkor nem tudtam alerttel (vagy bárhogy máshogy) kiírni azt az adatot belőle, mit egyébként helyesen beírt tömbként. Ha ütöttem egy entert akár egy xxx után is már nem jelent meg a tömb tartalma. Feltöltsem? Meg szeretnéd nézni? :D
    Mutasd a teljes hozzászólást!
  • És így küldöm/fogadom? Egyből tömb lesz vagy objektum! :D (Hajnalban mennyivel nehezebb az élet! :D )

    $.get('./controller.php', function(data){ $.each( data.retuen, function( i, itemData ) { jsArray[i] = itemData.retuen; }); ajax_tables(); });

    Ezzel -, ha működik - el legózok egy darabig majd, mert az ID is kell! :D Asszem végigcsinálom azt a tutorialt... (Szerdán kipróbálom!)
    Mutasd a teljes hozzászólást!
  • van erre külön metódus a jQuery-ben, $.getJSON()-el szokás feldolgozni.

    szemléltetésképp:

    index.php

    <html> <head> <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'></script> <script type='text/javascript'> $(document).ready(function(){ /* call the php that has the php array which is json_encoded */ $.getJSON('json_encoded_array.php', function(data) { /* data will hold the php array as a javascript object */ $.each(data, function(key, val) { $('ul').append('<li id="' + key + '">' + val.first_name + ' ' + val.last_name + ' ' + val.email + ' ' + val.age + '</li>'); }); }); }); </script> </head> <body> <ul> </ul> </body> </html>
    json_encoded_array.php

    <?php //itt nálad az előző példa szerint db-ből jönnek az adatok, aszerint át kell írni $arr = array( array( "first_name" => "Darian", "last_name" => "Brown", "age" => "28", "email" => "darianbr@example.com" ), array( "first_name" => "John", "last_name" => "Doe", "age" => "47", "email" => "john_doe@example.com" ) ); echo json_encode($arr); ?>
    p.s. fentebb látom a nagy gyorsaságomban hülyeséget írtam az echo-val kapcsolatban.
    Ez alapján már mennie kell...
    Mutasd a teljes hozzászólást!
  • json-t nem echo-val iratunk ki

    Valami itt bűzlik! :) Köszönöm szépen a segítséget! Kipróbálás nélkül elfogadom, mert ha ezután sem megy... Remélem, hogy többször nem akadok el! :S
    Mutasd a teljes hozzászólást!
abcd