0

В большинстве моих функций AJAX мне нужно дважды закодировать бесплатный текст, введенный пользователем, т. Е. Мне нужно сделать encodeURIComponent (encodeURIComponent (myString)).Двойной код для JSON

Если я делаю это только один раз, большинство символов, кроме двойных кавычек и длинных дефисов.

Если я предупреждаю, что результат из одного кодированного кода закодирован, но он разбивает строку JSON, поэтому я запутался.

Это ошибка с JavaScript или я что-то упускаю? Связано ли это с тем, как вам нужно дважды закодировать амперсанд и PHP, чтобы заставить его работать?


Привет,

Вот код, который позволяет магазин пользовательскому примечание к чему-то:

function saveAdminNote() { 

var note = encodeURIComponent(encodeURIComponent($('#adminNote').val().replace(/(\r\n|\n|\r)/gm,""))) ; 
JSON = '{"mode":"UPDATE_INTNOTE", "jobid":'+jobId+', "note":"'+note+'"}' ; 

clearTimeout(tOut2) ; 
tOut2 = setTimeout(function(){    
    $.ajax({ 
     data: 'dataString='+JSON, 
     url: 'core/job-builder-controlV2.php', 
     type: 'POST', 
     success: function(data){ 
      if(data) 
      { 
       $.prompt(data) ; 
      } 
     } 
    }) 

}, 250) ; 

} 

Так что, если моя структура данных является плоской, не существует никаких преимуществ используя JSON?

У меня создалось впечатление, что JSON дал немного больше безопасности?

+0

Вы что-то отсутствует, но это трудно сказать, что, как мы не можем видеть код, который создает ваши запросы или генерирует ваш результат. – Quentin

+0

Вам не нужно дважды закодировать. Пожалуйста, покажите нам свой код. – davidethell

+0

Нет, вам не нужно удваивать значения кодировки. Это то, что вы делаете неправильно в своем коде. – deceze

ответ

2

Основная проблема заключается в том, что вы пытаетесь построить JSON путем затирания вместе строк (вместо того, чтобы использовать библиотеку JSON) ... и кодирование часть этих строк (вместо кодирование результирующей JSON строки (то есть не- URI, которые вы хотите поместить в URI), которые jQuery сделает для вас).

Если вы хотите отправить JSON как часть запроса данных в виде закодирован, то вы бы:

$.ajax({ 
    data: { 
     dataString: JSON.stringify({ 
      "mode": "UPDATE_INTNOTE", 
      "jobid": jobId, 
      "note": $('#adminNote').val() 
     }) 
    }, 
    … 

Поскольку у вас есть плоская структура данных здесь (т.е. нет объектов или массивов в данных), то вы не нужно использовать JSON вообще.

$.ajax({ 
        data: {  
            "mode": "UPDATE_INTNOTE",  
            "jobid": jobId,  
            "note": $('#adminNote').val()  
            },  

(Тогда, в вашем PHP, просто получить доступ к $_POST['mode'] и т.д., вместо разбора JSON, а затем получить данные из результирующего объекта)

+0

Последний совет зависит от объектов JSON и PHP, имеющих достаточно похожий синтаксис, поэтому вы можете пропустить правильный декодирование? В этом случае я бы рекомендовал против этого. –

+1

@ OlegV.Volkov - Нет. Это зависит (как я сказал в ответе) о том, что структура данных плоская. Если вам не нужна сложная структура данных, вам не нужен JSON. Если вам не нужен JSON, вам не нужно кодировать JSON, а затем формировать кодировку, а затем декодировать форму, а затем декодировать JSON. Вам просто нужно сформировать кодировку (которая передает объект в 'data') и декодировать форму (которая считывает данные из' $ _POST'). – Quentin

2

Не строите JSON вручную, пусть правильный метод JSON.stringify выполнит вашу работу (и не перезаписывает также глобальный объект JSON).

json = JSON.stringify({ 
    "mode":"UPDATE_INTNOTE", 
    "jobid": jobId, 
    "note": $('#adminNote').val() 
})