Нужен вызов ajax для возврата массива json и выполнения функции javascript
Прежде всего, я должен уточнить, что это в Wordpress. У меня проблемы с возвратом массива json и выполнением функции javascript с использованием этого массива json. В настоящее время у меня есть список из 8 проектов в базе данных. У каждого проекта есть название, широта, долгота, статус (полный или неполный), отрасль (т. Е. Нефть, бензин и т. Д.) И состояние. Вызов ajax выполняется на основе трех раскрывающихся меню для состояния, отрасли и состояния. Затем вызов ajax создает новый wp_query на основе этого критерия, а затем заменяет список проектов на странице. Это все отлично работает.
Тем не менее, список также соответствует карте Google. Все проекты имеют маркеры на карте при загрузке страницы. Всякий раз, когда происходит фильтрация ajax, мне нужно удалить и заменить эти маркеры новыми списками. Здесь мне нужен массив json, чтобы добавить маркеры на карту. Я просто не могу понять, как вернуть массив json, а затем использовать его в функции javascript для добавления маркеров.
Ниже приведен вызов AJAX:
$( "#states" ).change(function() {
// Get values from all three dropdown menus
var state = $('#states').val();
var markets = $('#markets').val();
var services = $('#services').val();
$('#project-list').fadeOut();
// This does the ajax request
$.ajax({
url: ajaxurl,
data: {
'action' : 'json_info',
'state' : state,
'status' : markets,
'services' : services
},
success:function(data) {
// This outputs the result of the ajax request
$('#project-list').html( data );
$('#project-list').fadeIn();
// this is where I get lost
addMarkers(data);
} /*,
error: function(errorThrown){
console.log(errorThrown);
}*/
}); // end of ajax call
}); // end of click function
И в действии json_info у меня есть следующее:
function json_info() {
// The $_REQUEST contains all the data sent via ajax
if ( isset($_REQUEST) ) {
....
// create a new array to store projects
$projectsArray = array();
// query results by page template
$my_query = new WP_Query($pages);
....
if($my_query->have_posts()) :
while($my_query->have_posts()) :
$my_query->the_post();
// $projects array is filled with the results of the query loop
$projectsArray[] = array(
'title' => get_the_title(),
'lat' => get_field('latitude'),
'long' => get_field('longitude'),
'status' => get_field('status'),
'industry' => get_field('industry'),
'state' => get_field('state')
//'num' => $n
);
// this outputs each title into a list
echo '<li>'.the_title().'</li>';
endwhile; endif;
} // end of isset
?>
<script>
// set jqueryarray before the ajax file in order to parse the PHP, I'm not sure if this is correct???
var myjsonarray = <?php echo json_encode($projectsArray); ?>;
</script>
<?php
// I'm not sure if this is correct???
echo json_encode($projectsArray);
// Always die in functions echoing ajax content
die();
}
Я сжал функцию ради экономии места. Так что я просто поставил.... где устанавливаются переменные, а также где устанавливаются аргументы wp_query, так как все работает просто отлично.
Итак, вопрос в том, как вывести список заголовков и в то же время вернуть массив json? А затем использовать этот массив JSON для выполнения функции JavaScript, чтобы добавить маркеры на карте? Я знаю, как использовать информацию json для добавления маркеров, но не знаю, как получить к ней доступ в функции javascript, которая вызывается при успешном выполнении ajax. Буду признателен за любую помощь, так как я застрял после поиска во всем ответ.
РЕДАКТИРОВАТЬ: добавив фотографию ниже, чтобы показать, что происходит, когда я отображаю как список заголовков, так и кодированный массив json. Мне нужны элементы списка для заголовков, которые выводятся таким образом, но я не хочу, чтобы массив json отображался на экране. Мне нужно только иметь доступ к нему при успешном вызове ajax, чтобы выполнить функцию javascript.
1 ответ
Надеюсь это будет полезно
Вы можете управлять файлом JSON с помощью функции JSON.parse(data)
например.
var = jsonData JSON.parse (date);
Таким образом, в переменной jsonData вся информация будет организована таким же образом, как и в файле JSON.
yourTitle = jsonData.title;
yourLat = jsonData.lat;
и так далее