• 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?
 
Werbung:
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 :)
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben