JS не работал в "return array ('html' => $ response);" - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть файл PHP, который выводит продукты на основе WP_Query.

Пока все работает!

Но теперь Я хочу также вывести javascript в ответ.И это не распознается / загружается ... Для меня это выглядит как JavaScript не распознается как JavaScript.Если я вставлю предупреждение, это будет проигнорировано.

...
if ( $posts_gf->have_posts() ) :
    while ( $posts_gf->have_posts() ) : $posts_gf->the_post();
        $response .= '
        <script type="text/javascript">
            alert("Hello! I am an alert box!");
        </script>
        <div class="item col-md-4">
            Produkt
        </div>
        ';
    endwhile;
...

Я хочу загрузить карусель из js, которая включена в functions.php.Если я вставлю тот же код для карусели непосредственно в файл части шаблона "content-glasfaser.php", он будет работать.

the output

Вотвыдержка из файла, в который должна загружаться карусель (все файлы js / css загружаются / существуют в верхнем и нижнем колонтитулах):

    $products = self::$productDefinitions[$result['Standorttyp']];

    $posts_gf = new WP_Query(array(
        'post_type' => 'tarife',
        'posts_per_page' => 6,
        'post_status' => 'publish',
        'post__in' => $products,
        'orderby' => 'title',
        'order' => 'ASC',
        'tax_query' => array(
            array(
                'taxonomy' => 'tarif_kategorie',
                'field' => 'slug',
                'terms' => 'glasfaser',
            ),
        ),
    ));



    $street = utf8_encode($result['Strasse']);
    $houseNo = $result['Hausnummer'];
    $postCode = $result['Plz'];
    $city = $result['Ort'];


    $response = '
    <h3>inside return</h3>
    <section class="regular slider">';

    // Zeige die Glasfaser-Tarife

    if ( $posts_gf->have_posts() ) :
        while ( $posts_gf->have_posts() ) : $posts_gf->the_post();
            $response .= '
                <div class="item col-md-4">
                    Produkt
                </div>
            ';
        endwhile;
        wp_reset_postdata();
    else:
        $response .= '';

    endif;  


    return array('html' => $response);

    }
}

РЕДАКТИРОВАТЬ: для карусели я вставил 3 файла в мои functions.php(wordpress)

wp_enqueue_style( 'xxx-slider', get_stylesheet_directory_uri() . '/css/slick.css', array(), '20170925' );
wp_enqueue_style( 'xxx-slidertheme', get_stylesheet_directory_uri() . '/css/slick-theme.css', array(), '20170925' );  
... 
wp_enqueue_script( 'xxx-sliderjs', get_template_directory_uri() . '/js/slick.min.js', array(), '20190218', true );
  • Все эти файлы загружаются в верхний / нижний колонтитул.
  • Карусель должна запускаться внутри уже загруженного php.
  • Скриптс http://kenwheeler.github.io/slick/ и он работает в "уже загруженном" файле.Но не внутри Аякса (?).

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Я нашел решение:

Как мне выполнить JavaScript после загрузки Ajax?

Я вставил это в свой js

$( document ).ajaxComplete(function( event,request, settings ) {
  // carouselcode
});
0 голосов
/ 20 февраля 2019

Если это весь ваш код, кажется, что вы вводите ответ от php в уже загруженную html-страницу, верно?

Если это так, то JS не будет выполняться, если вы не вызовете явноЭто.Я бы справился с этим, переформатировав ваш JS, чтобы у вас остался один скрипт и вызывал функцию внутри этого скрипта после загрузки html.

$response = '
<script> function initialize { alert("Hello! I am an alert box!"); } </script>
<h3>inside return</h3>
<section class="regular slider">';

// Zeige die Glasfaser-Tarife

if ( $posts_gf->have_posts() ) :

, затем вы можете вызвать это после загрузки с помощью:

//Code that loads your php result
initialize();
...