2012-03-30 2 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>'; 

В моем яваскрипте функции я хочу, чтобы это массив, который будет размещен в вызове 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

+1

Почему вы используете ' асинхронный: false'? Это почти всегда плохая идея. – ThiefMaster

+0

@ThiefMaster: всегда плохая идея? почему тогда это будет даже вариант ... Иногда вы хотите, чтобы ваш скрипт не манипулировал DOM до того, как был завершен вызов ajax, когда, например, возвращается html, который обрабатывается после отправки запроса. было бы плохой идеей работать async в этом случае –

ответ

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 содержит doublequotes, которые не допускаются там, использовать htmlentities тоже закодировать их (и другие символы, которые являются незаконными там, как <> & и может больше появляться в формате JSON):

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

спасибо большое, что решило проблему –

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>'; 
Смежные вопросы