2016-11-30 6 views
0

Ich bin ein Neuling bei der Verwendung von jquery und stuffs so entschuldigen Sie mich für meinen Mangel an Erklärung oder für die Verwendung der falschen Begriffe.Antwort in Javascript Array kann nicht

Momentan habe ich Probleme, mein HTML anzuzeigen, da es eine leere Seite zeigt. Ich habe versucht, mein PHP zu debuggen und es scheint, als ob dort kein Fehler ist. Als ich versuchte, die URL auf Browser eingeben i kann dies beispielsweise angezeigt werden:

[{"vendorid":1,"vendor_name":"Korean stall","item_id":"1","item_name":"kimchi fried rice","item_image":kimchi fried rice.jpg,"item_description":aromatic fried rice,"price":"3.00","available":"Yes"}] 

Die VendorID aus dem Bild auf der vorherige Seite genommen werden von der Tabelle angehängt mit diesem Code:

<a href='#' class='ui-img' onClick='window.location=&quot;shop.html?vendorid=" + arr[i].vendorid + "&quot;'><img src='" + serverURL() + "/images/" + arr[i].imagefile + "' height='150'> 

In Javascript, ich bin in der Lage zu alarmieren (URL) und die Vendorid zu bekommen. Aber ich kann das Array in Alarm (Warnung) nicht warnen, da nichts herauskommt. Jedoch, als ich versuchte, onclick = "shop()"; Ohne eine Vendor-ID zu erhalten, zeigt meine Warnung (URL) vendorid = undefined an, gefolgt von der zweiten Warnung alert = [].

Das ist mein javascript:

<div data-role="content" class="ui-content" id=**"itemtable"**> 
     <table data-role="table" data-mode="reflow" class="ui-responsive" id="homey"> 
      <tbody id=**"mybody"**> 
      </tbody> 
     </table>    
    </div> 

Nicht sicher, ob dies erforderlich ist .. aber das ist mein php:

<?php 
    header("Access-Control-Allow-Origin: *"); 
    header("Content-Type: application/json; charset=UTF-8"); 

    $conn = new mysqli(XXXXX); 
    $vendorid = $_GET['vendorid']; 
    $result = $conn->query("select * from menu where vendorid = '" . $vendorid . "'"); 

    $outp = "["; 
    while($rs = $result->fetch_array(MYSQLI_ASSOC)) { 
     if ($outp != "[") {$outp .= ",";} 
     $outp .= '{"vendorid":' . $rs["vendorid"] . ','; 
     $outp .= '"vendor_name":"' . $rs["vendor_name"] . '",'; 
     $outp .= '"item_id":"' . $rs["item_id"] . '",'; 
     $outp .= '"item_name":"' . $rs["item_name"] . '",'; 
     $outp .= '"item_image":' . $rs["item_image"] . ','; 
     $outp .= '"item_description":' . $rs["item_description"] . ','; 
     $outp .= '"price":"' . $rs["price"] . '",'; 
     $outp .= '"available":"' . $rs["available"] . '"}'; } 

    $outp .="]"; 
    $conn->close(); 
    echo($outp); 
    ?> 

function getShopDetails() { 
      var xmlhttp = new XMLHttpRequest(); 
      var url = serverURL() + "/shop.php"; 
      url += "?vendorid=" + decodeURIComponent(getUrlVars()["vendorid"]); 

      **alert(url);** 
      xmlhttp.onreadystatechange=function() { 
       if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
        displayShopDetails(xmlhttp.responseText); 
       } 
      } 
      xmlhttp.open("GET", url, true); 
      xmlhttp.send();  
    } 

    function displayShopDetails(response){ 
     var arr = JSON.parse(**response**); 
     **alert(response);** 
     var i; 

     $(**"#mybody"**).find("tr").remove(); 
     for(i = 0; i < arr.length; i++) { 

     $(**"#mybody"**).append( 
      "<tr><td>" + arr[i].vendorID + 
      "</td><td>" + arr[i].vendor_name + 
      "</td><td>" + arr[i].itemname + 
      "</td><td>" + arr[i].price + 
      "</td><td>" + arr[i].item_description + "</td></tr>" 
     ); 

     } 

     $(**"#itemtable"**).table("refresh"); 
    } 

    getShopDetails(); 

Das ist mein html die Tabelle anzuzeigen ist

Weiß jemand, warum kann ich nicht das Array in Alert (Antwort) warnen? Entschuldigung für den langen Post. ((

+0

Fehler: In der Browser - Konsole hat PHP auch keine Methoden, um richtig formatierten JSON für Sie zu erstellen, anstatt Sie JSON manuell zu rollen, wenn einer dieser Zeichenfolgenwerte (Beschreibung , Name usw.) haben ein '' 'in ihnen, Sie haben Probleme von Hand rollen –

+0

Ahh, da ist das Problem ... es ist so offensichtlich, wenn Sie auf die Beispielausgabe schauen ... Sie brauchen' "' um den Wert von item_image und item_description - genau wie du es mit den anderen Strings in der Ausgabe machst (siehe was ich über handgerolltes JSON meine) –

+0

Dieser Code ist ein perfektes Beispiel dafür, wie man ein anfälliges Shop-System erstellt. Bitte lesen Sie über SQL-Injection. – Robert

Antwort

1

Wenn man sich die Syntax aussehen Markierung für die Daten, die Sie Ausgabe

[{ 
    "vendorid":1, 
    "vendor_name":"Korean stall", 
    "item_id":"1", 
    "item_name":"kimchi fried rice", 
    "item_image":kimchi fried rice.jpg, 
    "item_description":aromatic fried rice, 
    "price":"3.00", 
    "available":"Yes" 
}] 

Sie sollten sofort sehen, das Problem

"item_image":kimchi fried rice.jpg, 
    "item_description":aromatic fried rice, 

Nein " um diejenigen Werte

+0

Ihr einziger Fehler ist der '$ outp. = '{" vendorid ":'. $ rs ["vendorid"]. ","; 'sollte 'outp sein. =' {" vendorid ":" '.outp. =' {"vendorid": "'.outp. =' {" vendorid ":" '. rs ["vendorid"].' ", '; ' –

+0

omg danke !! Ich wusste nicht, ein einfaches Anführungszeichen in meinem PHP wird diesen Unterschied machen. Ich habe nur angenommen, dass, da mein PHP die Ausgabe zurückgeben kann, alles funktioniert. Darf ich wissen, was meinst du mit richtig formatiertem JSON? Da meine Schule die handgerollte Methode verwendet, folgte ich einfach ihrer Methode. –

+0

Sollte 'outp. =' {"Vendorid": "'.outp. =' {" Vendorid ":" '.outp. =' {"Vendorid": "'. Rs [" vendorid "] sein.""; ";" <---- Irgendwie druckt es zweimal, es ist nur die Formatierung, die meinen Kommentar verwirrte. Übrigens, @yanxifoo, du solltest auf "Akzeptieren" klicken, um seine Antwort zu würdigen. –