Увеличивающаяся проблема с JavaScript - PullRequest
0 голосов
/ 23 сентября 2011

Я чрезвычайно новичок в javascript, поэтому я не знаю, правильно ли я это делаю.

У меня есть какой-то php, который заполняет массив переменных javascript:

<?php

$pages = get_pages(array('child_of' => $post->ID, 'sort_column' => 'menu_order'));
$data = array();
foreach($pages as $post){
  setup_postdata($post);
  $fields = get_fields(); 
  $data[] = '<p>'.$fields->company_name.'</p>';
}
wp_reset_query();

// the js array
echo 'var marker_data = ["'.implode('","', $data).'"];';
?>

Затем он передает этот javascript:

infowindow.setContent(marker_data[i]);

Проблема в том, что он не увеличивается.Если я изменю «я» на «0» или «1», то это сработает.Но, очевидно, мне нужно увеличить его до.

Ответы [ 3 ]

1 голос
/ 23 сентября 2011

Вам нужно увеличить i в JavaScript, а не в php, например:

<script type="application/javascript">
<?php
$pages =get_pages(array('child_of' => $post->ID, 'sort_column' => 'menu_order'));
$data = array();
foreach($pages as $post){
  setup_postdata($post);
  $fields = get_fields(); 
  $data[] = '<p>'.htmlspecialchars($fields->company_name).'</p>';
}
wp_reset_query();

echo 'var marker_data = ' . json_encode($data) . ';'; // Instead of implode
?>
for (var i = 0;i < marker_data.length;i++) {
    infowindow.setContent(marker_data[i]);
}
</script>
0 голосов
/ 23 сентября 2011

Хорошие ответы приведены выше. Это обычный способ обучения старой школы, как вы смешиваете php и javascript массивы, он также может быть адаптирован к вашим потребностям, но я также предлагаю вам пойти дальше и искать новые вещи для schoold.

<html>
<head>
<script type="text/javascript">
var myRandoms = new Array();
<?php
$dbq="\"";
for($i=0;$i<9;$i++)
    echo 'myRandoms[',$i,']=',$dbq,rand(1,999),$dbq,';';
?>
var len=myRandoms.length;
var i;
for(i=0;i<len;i++)
    alert(myRandoms[i]);

</script>
</head>
<body>
</body>
</html>
0 голосов
/ 23 сентября 2011

Как только ваш PHP запустится и вернется на страницу, взгляните на источник и посмотрите на свой JS. Это должно выглядеть примерно так

var marker_data = ['<p>Comp 1</p>', '<p>Comp 2</p>', '<p>Comp 3</p>'];

Это означает, что вы создали свой массив строк. Теперь вам нужно использовать цикл javascript для его итерации, что-то вроде этого.

var length = marker_data.length;
for (var i = 0; i < length; i++) {
   infowindow.setContent(marker_data[i]);
}

Помните, что вся эта итерация должна происходить в вашем коде JS, а не в вашем коде PHP. Их нельзя так смешивать.

...