2016-05-29 12 views
0

Ich habe diese hart codiert JS 2-dimensionales Array:erstellen 2d javsacript Arraydaten aus Ajax zurück Verwendung

var d = [ 
    ["05_001","05_002","05_003","05_004","05_005"], 
    ["05_006","05_007","05_008","05_009","05_010"] 
]; 

I Dieses Array kann bestätigen, arbeitet, indem sie die Ausgabe von Daten unter Verwendung von:

for(var i = 0; i < d.length; i++) { 
    var item = d[i]; 
    for(var j = 0; j < item.length; j++) { 
     console.log("item[" + i + "][" + j + "] = " + item[j]); 
    } 
} 

Ich möchte den Array-Inhalt unter Verwendung von AJAX definieren, und habe es geschafft, mit dieser Lösung so weit zu kommen:

die Array-Elemente

Dies wird

function getURL(url){ 
    return $.ajax({ 
     type: "GET", 
     url: url, 
     cache: false, 
     async: false 
    }).responseText; 
} 

//get the data back in the right format 
var data = getURL("emoji.php?cat=emoticons_travel_places"); 
alert(data); 

Die Alarmausgänge dies:

["05_001","05_002","05_003","05_004","05_005"], 
["05_006","05_007","05_008","05_009","05_010"] 

was in Ordnung ist, aber ich bin fest versuchen, herauszufinden, wie die Inhalte in den 2-dimensionalen Array erhalten .

Wenn ich versuche dies:

Ich habe versucht, dieses:

var d = [ 
    data 
]; 

Und dann das:

for(var i = 0; i < d.length; i++) { 
    var item = d[i]; 
    for(var j = 0; j < item.length; j++) { 
     console.log("item[" + i + "][" + j + "] = " + item[j]); 
    } 
} 

Es gibt dieses:

item[0][0] = [ 
plugin.min.js:74 item[0][1] = " 
plugin.min.js:74 item[0][2] = 0 
plugin.min.js:74 item[0][3] = 5 
plugin.min.js:74 item[0][4] = _ 
plugin.min.js:74 item[0][5] = 0 
plugin.min.js:74 item[0][6] = 0 
plugin.min.js:74 item[0][7] = 1 
plugin.min.js:74 item[0][8] = " 
plugin.min.js:74 item[0][9] = , 
plugin.min.js:74 item[0][10] = " 
plugin.min.js:74 item[0][11] = 0 
plugin.min.js:74 item[0][12] = 5 
plugin.min.js:74 item[0][13] = _ 
plugin.min.js:74 item[0][14] = 0 
plugin.min.js:74 item[0][15] = 0 
plugin.min.js:74 item[0][16] = 2 
plugin.min.js:74 item[0][17] = " 
plugin.min.js:74 item[0][18] = , 
plugin.min.js:74 item[0][19] = " 
plugin.min.js:74 item[0][20] = 0 
plugin.min.js:74 item[0][21] = 5 
plugin.min.js:74 item[0][22] = _ 
plugin.min.js:74 item[0][23] = 0 
plugin.min.js:74 item[0][24] = 0 
plugin.min.js:74 item[0][25] = 3 
plugin.min.js:74 item[0][26] = " 
plugin.min.js:74 item[0][27] = , 
plugin.min.js:74 item[0][28] = " 
plugin.min.js:74 item[0][29] = 0 
plugin.min.js:74 item[0][30] = 5 
plugin.min.js:74 item[0][31] = _ 
plugin.min.js:74 item[0][32] = 0 
plugin.min.js:74 item[0][33] = 0 
plugin.min.js:74 item[0][34] = 4 
plugin.min.js:74 item[0][35] = " 
plugin.min.js:74 item[0][36] = , 
plugin.min.js:74 item[0][37] = " 
plugin.min.js:74 item[0][38] = 0 
plugin.min.js:74 item[0][39] = 5 
plugin.min.js:74 item[0][40] = _ 
plugin.min.js:74 item[0][41] = 0 
plugin.min.js:74 item[0][42] = 0 
plugin.min.js:74 item[0][43] = 5 
plugin.min.js:74 item[0][44] = " 
plugin.min.js:74 item[0][45] = ] 
plugin.min.js:74 item[0][46] = , 
plugin.min.js:74 item[0][47] = 
plugin.min.js:74 item[0][48] = [ 
plugin.min.js:74 item[0][49] = " 
plugin.min.js:74 item[0][50] = 0 
plugin.min.js:74 item[0][51] = 5 
plugin.min.js:74 item[0][52] = _ 
plugin.min.js:74 item[0][53] = 0 
plugin.min.js:74 item[0][54] = 0 
plugin.min.js:74 item[0][55] = 6 
plugin.min.js:74 item[0][56] = " 
plugin.min.js:74 item[0][57] = , 
plugin.min.js:74 item[0][58] = " 
plugin.min.js:74 item[0][59] = 0 
plugin.min.js:74 item[0][60] = 5 
plugin.min.js:74 item[0][61] = _ 
plugin.min.js:74 item[0][62] = 0 
plugin.min.js:74 item[0][63] = 0 
plugin.min.js:74 item[0][64] = 7 
plugin.min.js:74 item[0][65] = " 
plugin.min.js:74 item[0][66] = , 
plugin.min.js:74 item[0][67] = " 
plugin.min.js:74 item[0][68] = 0 
plugin.min.js:74 item[0][69] = 5 
plugin.min.js:74 item[0][70] = _ 
plugin.min.js:74 item[0][71] = 0 
plugin.min.js:74 item[0][72] = 0 
plugin.min.js:74 item[0][73] = 8 
plugin.min.js:74 item[0][74] = " 
plugin.min.js:74 item[0][75] = , 
plugin.min.js:74 item[0][76] = " 
plugin.min.js:74 item[0][77] = 0 
plugin.min.js:74 item[0][78] = 5 
plugin.min.js:74 item[0][79] = _ 
plugin.min.js:74 item[0][80] = 0 
plugin.min.js:74 item[0][81] = 0 
plugin.min.js:74 item[0][82] = 9 
plugin.min.js:74 item[0][83] = " 
plugin.min.js:74 item[0][84] = , 
plugin.min.js:74 item[0][85] = " 
plugin.min.js:74 item[0][86] = 0 
plugin.min.js:74 item[0][87] = 5 
plugin.min.js:74 item[0][88] = _ 
plugin.min.js:74 item[0][89] = 0 
plugin.min.js:74 item[0][90] = 1 
plugin.min.js:74 item[0][91] = 0 
plugin.min.js:74 item[0][92] = " 
plugin.min.js:74 item[0][93] = ] 
plugin.min.js:74 item[0][94] = 

Also anstatt ein Array, das ist 5 von 2, es scheint ein Array zu sein, das 1 zu 95 ist, da für jedes Zeichen ein Element aus den vom AJAX-Aufruf zurückgegebenen Daten besteht.

Falls es relevant ist, ist dies der PHP-Code für „emoji.php“

ist
<?php 
$root="../../../"; 
include $root . 'config/init.php'; 
require $root . 'vendor/autoload.php'; 

$foo = "test"; 

$cat = $_GET['cat']; 

$sql = "SELECT fld_unicode FROM xx_plugs_emojis WHERE fld_category = :cat LIMIT 10"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':cat', $_GET['cat']); 
$stmt->execute(); 
$ct = $stmt->rowCount(); 

$str = NULL; 
$max = $ct; 
$row_count = 5; 
$i = 1; 

while ($row = $stmt->fetch()){ 

    $emoji = $row['fld_unicode']; 

    $rem = $i % $row_count; 

    if ($rem === 1) { 
     $str .= "["; 
    } 

    if ($rem > 0 && $i != $max) { 
     $str .= "\"$emoji\","; 
    } else { 
     $str .= "\"$emoji\""; 
    } 

    if ($rem === 0 && $i < $max) { 
     $str .= "],\n"; 
    } 

    if ($i === $max) { 
     $str .= "]\n"; 
    } 

    $i++; 

} 

echo $str; 
?> 

Antwort

1

Während Ihr hartcodierte Array ein zweidimensionales Array von Strings ist, die von AJAX-Aufruf zurückgegebenen Daten ist eine einfache Saite und wird wie eine behandelt. Falls Sie ein Array vom Server beziehen möchten, sollten Sie JSON verwenden.

Zunächst ist die vom PHP-Skript zurückgegebene Zeichenfolge kein gültiger JSON. Um es gültig zu machen, wickeln Sie es mit zusätzlichen eckigen Klammern, so dass es sollte wie folgt aussehen:

[["05_001","05_002","05_003","05_004","05_005"], 
["05_006","05_007","05_008","05_009","05_010"]] 

Danach müssen Sie kleine Änderungen in Ihrer Funktion getURL tun: Wickel Ergebnis von AJAX-Aufruf in JSON.parse() Methode:

function getURL(url){ 
    return JSON.parse($.ajax({ 
     type: "GET", 
     url: url, 
     cache: false, 
     async: false 
    }).responseText); 
} 

Alternativ können Sie den Rückgabetyp von aJAX-Aufruf angeben:

function getURL(url){ 
    return $.ajax({ 
     type: "GET", 
     url: url, 
     dataType: 'json', 
     cache: false, 
     async: false 
    }).responseText; 
} 
+0

mit 'async: false' in ajax-Anfragen Browser veraltet ist ein Anbieter nd. Es ist eine schreckliche Praxis und sollte nie verwendet werden, besonders jetzt, wo es entwertet ist und Warnungen in der Browser-Konsole geworfen werden, es nicht zu benutzen. Verwenden Sie stattdessen Versprechen Callbacks – charlietfl