• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

jQuery -> abgabe eines 2dimensionalen Arrays an einen AJAX Call

Status
Für weitere Antworten geschlossen.

Lok33

Neues Mitglied
Hi@all,

habe gerade ein problemchen mit nem ajaxcall: Ich möchte diesem ajaxcall ein 2-dimensionales array als data reinfüttern. Das soll passieren wie folgt:

AJAX-CALL #1 empfängt einen Datensatz (data1), welcher an ein php-script (script1.php) gesandt wird. Dieses php-script generiert mir einen 2-dimensionalen array, welchen der AJAX-CALL #1 als antwort empfängt. Dieser speichert die Antwort in einer öffentlichen Variable, welche in AJAX-CALL #2 als data benutzt werden soll.

code:

//AJAX-CALL #1

$.ajax({
type: "POST",
url: "Script1.php",
cache: false,
data: data1,
success: function(result){
data2=result;
},
error: function(result){
alert("sad story...");
}
});

//AJAX-CALL #2

$.ajax({
type: "POST",
url: "script2.php",
cache: false,
data: data2,
success: function(result){
hierpassiertirgendwasanderes
},
error: function(result){
alert("sad story...");
}
});

Das gestaltet sich derzeit als recht schwierig :/

Ich habe schonmal an einen ajax-call einen array übergeben und errinnere mich, dass ich dort quasi einen array durch konkatination von Werten zu einem string übergeben habe, das sah dann in etwa so aus:

a += IntIndex+"="+value+"&";

wobei a der wert war, den ich dann in der ajax funcktion mit "data: a," übergeben habe. Das "&" kam noch dahinter, weil ich das in einer schleife stehen hatte und der quasi einen grösseren string übegeben hat.
Bspweise; Ich wäre durch die Schleife gerannt und hätte die Werte "100" und "200" übergeben, ergab sich der string:

"0=100&1=200"

daraus ergab sich dann wie gewünscht für die weitere Bearbeitung :

Array(
[0]=100
[1]=200
)

Sooo, das ganze möchte ich nun 2-dimensional machen, ausserdem entsteht dieser string nun auf php-seite, was aber eigentlich - mal von der syntax abgesehen - keinen unterschied machen sollte... Ergo habe ich auch da mal den Spass mit der Konkationation versucht.

//2dimarray ist ein 2dimensinales array
//1dimarray ist dann ein array innerhalb des 2dimensionalen arrays

foreach($2dimarray as $key => $1dimarray){
$concat = "Bla=".$1dimarray['Bla']."&"."Bla2=".$1dimarray['Bla2']."\n";
$AJAXdata .= $key."=".$concat."&";
}
print_r($AJAXcall);

Das funktioniert nicht so recht... was auch Sinn macht, da er quasi einen riesigen string baut und nur mit "&"s trennt, wobei er nicht mehr zwischen einem inneren und einem äußeren array unterscheiden kann.. zumindest denke ich, dass das das problem ist...


Weiterhin habe ich mal funktioniert etwas zu bauen wie: Array[0][0]=Hallo,Array[0][1]=du,Array[1][0]=da,Array[1][1]=draussen .... , aber das kann so nicht gelesen werden :/ ( ich habe mir mal das result von AJAX-CALL #2 ausgeben lassen... da kommt nich mehr als

"Array ()" ... also is das vllt schon nicht falsch, aber ich kann da nichts mit anfangen :/

Wie kriege ich es nun hin, ein 2dimensionales array zu basteln, welches ich dann dem AJAX-CALL #2 übergeben kann?
 
Ich weiß nicht, ob du in deinem Code nur entsprechende Zeilen weggelassen hast, aber da ich im Beispiel der Einfachheit halber synchrone Requests gewählt habe, hier die Erläuterung dazu:

Ajax-Requests werden standardmäßig asynchron ausgeführt. Das bedeutet, das aufrufende Script läuft weiter und wartet nicht auf die Rückgabe des Requests. Anders gesagt: Vermutlich sind die Rückgabedaten noch gar nicht angekommen, wenn du sie bereits weiterverwenden möchtest. Setze die Requests auf synchron oder (eventuell vorzuziehen) löse weitere Verarbeitungsschritte im success-Event aus.​

Daten zwischen Client und Server können sinnvoll im JSON-Format ausgetauscht werden. Das automatisiert gewissermaßen das Zusammenpuzzlen des Datenstrings. Dazu habe ich ein Beispiel erstellt. Frage bei Verständnisproblemen bitte konkret nach.

Code:
<?php

function getPlacemarksForCity($city)
{
    $placemarks = array();

    if ($city === 'Berlin') {
        $placemarks[] = array('title' => 'Reichstag',
                              'lat'   => '123.456',
                              'long'  => '789.123');
        $placemarks[] = array('title' => 'KaDeWe',
                              'lat'   => '111.222',
                              'long'  => '333.444');
    }

    return $placemarks;
}

if (isset($_GET['ajax'])) {
    if (!isset($_POST['action'])) {
        exit;
    }

    switch ($_POST['action']) {
        case 'get_placemarks':
            $placemarks = getPlacemarksForCity($_POST['city']);
            echo json_encode($placemarks);
            break;
        case 'do_something_else':
            // Mir fällt nichts inhaltlich sinnvolles mehr ein, was man hier tun
            // könnte
            $tmp['serialized'] = serialize($_POST['placemarks']);
            echo json_encode($tmp);
            break;
        default:
            exit;
            break;
    }

    exit;
}

?><!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>New</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>

        <script type="text/javascript">

            var input      = {action : 'get_placemarks', city : 'Berlin'},
                placemarks = [];

            $(document).ready(function() {
                //AJAX-CALL #1
                $.ajax({
                    type     : "POST",
                    async    : false,
                    url      : "?ajax",
                    cache    : false,
                    data     : input,
                    dataType : 'json',
                    success: function(data) {
                        placemarks = data;
                    },
                    error: function() {
                        alert("sad story...");
                    }
                });

                // Kontrollausgabe
                alert(placemarks[0]['title']);

                //AJAX-CALL #2
                $.ajax({
                    type     : "POST",
                    async    : false,
                    url      : "?ajax",
                    cache    : false,
                    data     : {action     : 'do_something_else',
                                placemarks : placemarks},
                    dataType : 'json',
                    success: function(data) {
                        alert(data['serialized']);
                    },
                    error: function() {
                        alert("sad story...");
                    }
                });
            });

            

        </script>
    </head>

    <body></body>

</html>
 
Hey mermshaus,

erneut vielen Dank für die Antwort. Tatsächlich habe ich vergessen, zumindest den ersten Ajax-Call synchron auszuführen, damit der nächste Ajax-Call irgendetwas als input bekommen kann. Das habe ich kurz nach meinem post gefixt und vergessen zu ergänzen >.< sorry! Jetzt kommt etwas in der anderen Funktion an :).

Jetzt muss ich mal hinter das JSON Format blicken, das könnte sich natürlich als sinnvoll erweisen, denn ich muss dem Ajax-call auf jeden fall ein 2dimensionales array übergeben. Ich werde mich bezüglich dessen mal schlau machen und danhand deines Quellcodes nachverfolgen! Vielen Dank :)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben