我有这个数组,我想解析为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 :(得分:1)
JSON包含那里不允许使用的双引号,也使用htmlentities对它们进行编码(以及其他非法的字符,例如&lt;&gt;&amp;&amp;&amp;可能出现在JSON中):
$html .= '<td class="offerteCell"><a href="#" onclick="return addToOffer('.htmlentities(json_encode($offerText)).');" class="offerte">Offerte</a></td>';
答案 1 :(得分:1)
那应该是
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)));
我在这里使用换行符来覆盖它,但我希望在此页面中可以轻松查看结果。
答案 2 :(得分: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>';