PHP json_encode,数组在javascript中显示不正确


PHP json_encode , array not showing correct in javascript

我有这个数组,我想把它解析成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>

应该是

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

如果你有这样令人困惑的字符串文字,也可以考虑使用sprintf,它会让事情看起来更简单:

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

我在这里用了换行符,但我希望结果能在这个页面上轻松查看

JSON包含不允许使用的双引号,也使用htmlentities对其进行编码(以及其他非法字符,如<>&,可能出现在JSON中):

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

诀窍在于,在有效的JSON字符串中,属性在转义每个字符串时都被双引号引用。因此,您只需要用单引号更改双引号环绕函数,例如

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

onclick=''...''

但这两种解决方案都不合适。更好的方法是添加脚本标签,例如

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