Передача 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, '"') );

    // ...
},

// ...
 1
Author: Ian Dunn, 2011-07-23

2 answers

Хотя это не точный ответ на ваш точный вопрос, я согласен с методом, предложенным в комментарии. Просто пропустите попытки поместить данные в одно измерение и вместо этого используйте аргумент l10n_print_after.

Смотрите передайте объект/JSON в wp_localize_script вопрос и ответ там.

 3
Author: Rarst, 2017-04-13 12:37:48

placemarks[] = array( это означает, что placemarks - это массив массивов, верно?

Также вам не нужно перемещаться туда и обратно, просто позвоните $.parseJSON() по всем bgmpData вар:

var bgmpData_parsed = $.parseJSON( bgmpData);

Тонкий вы можете получить доступ к маркерам с помощью bgmpData_parsed.markers

 0
Author: Bainternet, 2011-07-23 21:15:34