Передача HTML-кода в формате JSON из Wordpress в JavaScript
Я пытаюсь передать содержимое сообщения (которое может содержать HTML) в JavaScript через wp_localize_script(). wp_localize_script() не может обрабатывать многомерные массивы, поэтому я кодирую его в JSON, а затем декодирую с помощью jQuery.
Это прекрасно работает, пока у вас есть только текст, и вы заменяете сущность "
на обычную "
перед вызовом $.parseJSON()
. Однако, если вы попытаетесь проанализировать сообщение с использованием HTML, вы получите такие ошибки, как
JSON.синтаксический анализ: ожидаемое имя свойства или '}' http://redacted .локальный/wp/wp-включает в себя/js/jquery/jquery.js?ver=1.6.1 Строка 16
Итак, я предполагаю, что мне нужно выполнить еще несколько манипуляций со строками, прежде чем пытаться разобрать их, чтобы преобразовать больше сущностей обратно в обычные символы, но я не хочу просто выбирать несколько символов, с которыми у меня возникают ошибки, потому что я уверен, что есть еще десятки, которые я могу пропустить. Существует ли всеобъемлющий или стандартный способ сделать это? Я сделал много искал и нашел какие-либо ответы, так что это заставляет меня думать, что я упускаю что-то очевидное.
Вот сторона PHP:
public function loadResources()
{
// ...
wp_register_script(
'bgmp',
plugins_url( 'functions.js', __FILE__ ),
array( 'googleMapsAPI', 'jquery' ),
self::BGMP_VERSION,
true
);
// ...
if( !is_admin() && $this->mapShortcodeCalled )
{
// ...
wp_enqueue_script('bgmp');
$bgmpData = array(
'options' => $this->getMapOptions(),
'markers' => $this->getPlacemarks()
);
wp_localize_script( 'bgmp', 'bgmpData', $bgmpData );
}
// ...
}
public function getPlacemarks()
{
// ...
foreach( $publishedPlacemarks as $pp )
{
// ...
$placemarks[] = array(
// ...
'details' => $pp->post_content,
// ...
);
}
return json_encode( $placemarks );
}
И вот сторона JavaScript
// ...
init : function()
{
// ...
bgmpData.markers = $.parseJSON( bgmpData.markers.replace(/"/g, '"') );
// ...
},
// ...
2 answers
Хотя это не точный ответ на ваш точный вопрос, я согласен с методом, предложенным в комментарии. Просто пропустите попытки поместить данные в одно измерение и вместо этого используйте аргумент l10n_print_after
.
Смотрите передайте объект/JSON в wp_localize_script вопрос и ответ там.
placemarks[] = array(
это означает, что placemarks
- это массив массивов, верно?
Также вам не нужно перемещаться туда и обратно, просто позвоните $.parseJSON()
по всем
bgmpData
вар:
var bgmpData_parsed = $.parseJSON( bgmpData);
Тонкий вы можете получить доступ к маркерам с помощью bgmpData_parsed.markers