Intereting Posts
magento 1.8 добавить товар в корзину с помощью php PHP $ GLOBALS отсутствует $ _SERVER Получить идентификатор URL-адреса Как создать фид файлов от людей, которых следует пользователю? Строка извлечения регулярных выражений между двумя фигурными фигурными скобками Отладка 2 серверов с помощью Xdebug php одновременно PHP: поиск изображений и ссылок с относительным путем в выходе и преобразование их в абсолютный путь Почему этот код выдает API API API 191? WooCommerce: автоматическое завершение оплаченных заказов (в зависимости от способов оплаты) Ошибка оператора switch php при int = 0 Ошибка nginx подключиться к php5-fpm.sock не удалось (13: отказ от прав) Как проверить работу cron на локальном сервере, например WAMP? PHP-REGEX: акцентированные буквы соответствуют неактивным, и наоборот. Как достичь этого? Переменная PHP Persist для всех запросов Объявление сеанса Максимальное время жизни в htaccess

Как передать данные textarea через ajax, который содержит амперсанды и / или разрывы строк?

У меня есть textarea в форме, которую я пытаюсь отправить через ajax с помощью jQuery. Моя проблема в том, что в textarea есть строки и амперсанды (&).

Я получаю значение textarea со следующим кодом js:

// Find all the fields with class dirty $('#customer .dirty').each(function() { fieldName = $(this).attr('id'); fieldValue = $(this).val(); // Create an object of dirty field names and values var fields = { 'fieldName' : fieldName, 'value' : fieldValue }; // Add the object of field names and values to the custRecordToUpdate array custRecordToUpdate.push(fields); // note: this was initialized before }); var arrayToSend = { customer : custRecordToUpdate }; var dataToSend = JSON.stringify(arrayToSend); 

Значение textarea выглядит следующим образом:

 1/8 CLEAR MIRROR 3/8 CLEAR GLASS 

Если я console.log (dataToSend) , я получаю следующее:

 {"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS"}]} 

На скрипте PHP я json_decode опубликованные данные, и он работает правильно.

Если я затем изменил текстовое поле, чтобы включить амперсанд, как показано ниже:

 1/8 CLEAR MIRROR 3/8 CLEAR GLASS & GLASS 

json_decode не работает . На консоли console.log (dataToSend) отображается следующее:

 {"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}]} 

json_last_error () отображает синтаксическую ошибку

Если я изменил код js выше:

 fieldValue = encodeURIComponent($(this).val()); 

Затем отобразится console.log (dataToSend) :

 {"customer":[{"fieldName":"cust_note","value":"1%2F8%20CLEAR%20MIRROR%0A3%2F8%20CLEAR%20GLASS"}]} 

и json_decode не работает с обоими случаями с синтаксической ошибкой .

Итак, как я могу отправить текстовые данные, содержащие строки и амперсанды с помощью ajax, в php-сервер и не удалось запустить json_decode?

Решение:

Основываясь на некоторых комментариях ниже, я решил изменить код ajax, который отправляет данные, и это решило проблему, хотя я не уверен, почему.

Во всяком случае, вот код, если он может помочь кому угодно.

 var returnedHTML = $.ajax({ type: "POST", url: 'index.php/customer/save_edit_customer', //data : "data="+dataToSend, // This is how I was sending it before data : { "data" : dataToSend }, // This is the new code that works! async: false, cache: false }).responseText; 

если ваш текст сохранен в переменной textareaText, сделайте это

 var val = textareaText.replace('&', '__and__'); 

отправьте это как ajax

и на стороне сервера

если ваше значение json_decode`d сохраняется в переменной с именем $ data, выполните следующие действия:

 $val = str_replace( '__and__', '&', $data['value'] ); 

таким образом вы сможете сохранить амперсанды, не допуская неудачи json_decode

вы можете использовать что-то другое вместо того,

хотя это путает, почему он ломается.

Я не уверен, какова должна быть форма вашего объекта, но это работает для меня, если я изменюсь:

 {"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}]} 

к

 {"customer":{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}} 

т.е. удалить синтаксис массива из объекта json.

Вот мой тест …

  var customer = {"customer":{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}}; alert(customer.customer.fieldName); alert(customer.customer.value); 

Это говорит о том, что & не ваша проблема, но [].