2012-03-30 18 views
0

Ich habe dieses Array, das ich in Javascript analysieren möchte.PHP json_encode, Array nicht korrekt in Javascript

$offerText[] = 

(
[0] => Name 
[1] => Adres 
[2] => ZIP 
[3] => CITY 
[4] => E-mail 
) 

ich diesen Code verwende, dies zu tun:

$html .= '<td class="offerteCell"><a href="#" onclick="return addToOffer('.json_encode($offerText).');" class="offerte">Offerte</a></td>'; 

In meiner Javascript-Funktion, mag ich dieses Array in einem Ajax-Aufruf gebucht werden.

function addToOffer(offer_text) { 
    $.ajax({ 
     url: "offer.php?action=add&offer_text="+offer_text, 
     cache: false, 
     method: "GET", 
     async: false, 
     complete: function(request) { 
      if(!request || request.readyState != 4 || request.status != 200) return false; 
      eval("var obj = "+request.responseText); 

      $("span.error").hide(); 
      $("p").removeClass('error'); 
      if (obj.errors) { 
       for (var i in obj.msg) { 
        $("#error_form_"+i).html(obj.msg[i]).css('display','block'); 
        $("#p_form_"+i).addClass('error'); 

        alert("error"); 
       } 
      } else { 
       var offer = $('#OfferContainer'); 
       offer.show().html(obj.html); 

       var txt = Config.langOfferComplete; 
       var buttons = {}; 
       buttons[Config.langOk] = false; 
       buttons[Config.langGoToOffer] = true; 

       $.prompt(txt,{ 
        submit: function(v,m,f){ 
         if (v) { 
          window.location = Config.base + '/' + Config.lang + "/offer.htm"; 
         } 
        }, 
        buttons: buttons 
       }); 
      } 

      return false; 
     } 
    }); 

    return false; 
} 

Aber das funktioniert nicht, weiß jemand, was ich falsch mache? Ich sehe die Ausgabe von meinem html i diese:

<a class="offerte" naam","adres","postcode","woonplaats","e-mailadres"]);"="" onclick="return addToOffer([" href="#">Offerte</a> 
+0

Sie zuweisen das Array '$ offerText []' hinzufügen, damit Sie tun möchten 'json_encode ($ offerText [0])' – MetalFrog

+1

Warum verwenden Sie ' asynchron: falsch? Das ist fast immer eine schlechte Idee. – ThiefMaster

+0

@ThiefMaster: immer eine schlechte Idee? Warum wäre es dann sogar eine Option? Manchmal möchten Sie verhindern, dass Ihr Skript das DOM manipuliert, bevor der Ajax-Aufruf abgeschlossen ist, wenn zum Beispiel der HTML-Code zurückgegeben wird, der bearbeitet wird, nachdem die Anfrage gesendet wurde. es wäre eine schlechte Idee, in diesem Fall async zu arbeiten –

Antwort

1

Das

onclick="return addToOffer('.addslashes(json_encode($offerText)).');" 

auch sprintf, wenn Sie solche Confu Erwägen Sie haben sollte Stringliterale singen, macht es die Dinge aussehen einfacher:

$html .= sprintf(
    '<td class="offerteCell">'. 
    '<a href="#" onclick="return addToOffer(%s);" class="offerte">Offerte</a>'. 
    '</td>', 
    addslashes(json_encode($offerText))); 

ich es übertrieben mit der Linie hier bricht, aber ich wollte das Ergebnis bequem auf dieser Seite sichtbar sein.

1

JSON enthält doublequotes, die dort nicht erlaubt sind, verwenden htmlentities auch sie zu kodieren (und andere Zeichen, die illegal sind wie <> & und occure kann innerhalb JSON):

$html .= '<td class="offerteCell"><a href="#" onclick="return addToOffer('.htmlentities(json_encode($offerText)).');" class="offerte">Offerte</a></td>'; 
+0

vielen Dank, das das Problem gelöst –

0

Der Trick ist, dass in einer gültigen JSON-Zeichenfolge Attribute doppelt zitiert werden, während alle. Daher müssen Sie nur die doppelte Anführungszeichen-Funktion mit einfachen Anführungszeichen e ändern.

g
'<a onclick=\'return addToOffer('.json_encode($offerText).'\');">.... <a>'; 

d.h

onclick=\'...\' 

Aber keine Lösungen ist richtig. Eine bessere Möglichkeit wäre, Script-Tag zB

<script> 
    var offerText=<?php echo json_encode($offerText) ;?> 
</script> 
'<a onclick="return addOffer(offerText)"> ... <a>'; 
Verwandte Themen