2012-03-30 18 views
0

我有這個數組,我想解析成javascript。PHP json_encode,數組在javascript中顯示不正確

$offerText[] = 

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

我使用此代碼這樣做:

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

在我的javascript函數我想張貼在Ajax調用這個數組。

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; 
} 

但這不起作用有人知道我在做什麼錯了嗎?我看我的HTML的輸出我得到這個:

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

你分配你的陣列'$ offerText []'所以你想做的事'json_encode($ offerText [0])' – MetalFrog 2012-03-30 11:54:50

+1

爲什麼你使用'異步:FALSE'?這幾乎總是一個壞主意。 – ThiefMaster 2012-03-30 11:56:22

+0

@ThiefMaster:總是一個壞主意?那麼爲什麼它甚至會成爲一個選項呢......有時候你想阻止你的腳本在ajax調用完成之前操作DOM,例如,當返回html時,在請求被髮送後被操縱。在這種情況下工作異步將是一個壞主意 – 2012-03-30 12:15:11

回答

1

這應該是

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

還可以考慮使用sprintf,如果你有這樣的confu唱字符串常量,它使事情看起來簡單:

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

我與換行符這裏過分了,但我想要的結果是在本頁面輕鬆查看。

1

JSON包含不允許有雙引號,使用ヶ輛太它們編碼(和其他字符都是非法存在類似<> &並可能occure內JSON ):

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

非常感謝,解決了這個問題 – 2012-03-30 12:13:56

0

訣竅是,在一個有效的JSON字符串屬性是雙引號,而每個轉義。因此,你只需要用單引號e來改變函數的雙引號。摹

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

onclick=\'...\' 

但無論解決方案是正確的。更好的辦法是添加腳本標籤如

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