ammaps / amcharts используя dataLoader и проходящий пост

Используя dataLoader ammaps, есть ли способ передать параметры записи во внешний файл?

Я создаю отчет, который содержит карту, которая при щелчке предоставит список новостных статей из таблицы MySQL. Я загружаю данные JSON с помощью dataLoader. Тем не менее мне нужно иметь возможность передать значение (reportId) в сценарий, который генерирует файл JSON.

вот мой код:

var map = AmCharts.makeChart("mapdiv", {
  type: "map",
  "dataLoader": {
    "url": "maparticlesfeed.json.php",
    "format":"json",
    "showErrors": false//,
    // tried this:  
    //"type" : "post",
    //"data" : {"reportIdFromPost" : 1}
  },
. . . //the rest of the map config 

И это maparticlesfeed.json.php:

<?php include('database-connect.php'); 
$con=Database::connect();
$query=$con->prepare("SELECT * from articles Where reportId=$POST['reportIdFromPost']");
$query=>execute();
$articlesList=$query->fetchall(PDO::FETCH_ASSOC);
?>

{
"map" : "MyMapName",
"_comment" : "Here, instead of hard-coding the headlines, we will iterate through $articlesList",
"areas" : [   
    { "title" : "Virginia",
        "id" : "US-VA", 
        "selectable" : true,
        "numArticles" : 4,
        "articles" : [
            { "headline" : "This is the first headline",
                "link" : "link url"
            },
            { "headline" : "This is the second headline",
                "link" : "link url"
            },
            { "headline" : "This is the third headline",
                "link" : "link url"
            },
            { "headline" : "This is the fourth headline",
                "link" : "link url"
            }
        ]
    },
    { "title" : "Tennessee",
        "id" : "US-TN", 
        "selectable" : false,
        "numArticles" : 6
    } 
  ]
} 

3 ответа

Решение

Я пошел по пути JQuery, чтобы решить эту проблему. Я все еще хотел бы знать, если есть способ сделать это с dataLoader, но вот обходной путь, если у кого-то еще есть эта проблема в будущем:

$.ajax({
  dataType: "json",
  url: "maparticlesfeed.json.php",
  data: { reportIdFromPost: 1 },
  type: "post",
  success: function(data){ 
    console.log(data); // for debugging
    makeMap(data);
  },
  error: function(data) {
    console.log('it did not work.');
    console.log(data.responseText); 
  }
});
function makeMap(theData) {
    var map = AmCharts.makeChart("mapdiv", {
    type: "map",
    /* DON'T NEED THIS ANYMORE:  
      "dataLoader": {
      "url": "maparticlesfeed.json.php",
      "format":"json",
      "showErrors": false
    },*/
    // replace instead with this:
    "dataProvider" : theData,
    // ... the rest of the map config ...
    }
});

И в maparticlesfeed.json.php:

<?php 
include('database-connect.php'); 
$con=Database::connect();

if(!empty($_POST) && isset($_POST['reportIdFromPost']) ) { 
    $postedReportId= $_POST['reportIdFromPost']; 
}

include('database-connect.php'); 
$con=Database::connect();
$query=$con->prepare("SELECT * from articles Where reportId=$postedReportId ");
$query->execute();
$articlesList=$query->fetchall(PDO::FETCH_ASSOC);
?>

{
"map" : "MyMapName",
"areas" : [
       // Code to json_encode the results from $articlesList
    ]   
}

Возможно, вы публикуете данные JSON, а затем не декодируете их, когда пытаетесь использовать значение в своем PHP-скрипте.

Попробуйте это в верхней части maparticlesfeed.json.php:

<?php
include('database-connect.php');

$postedValues = json_decode($POST['reportIdFromPost'], true);

$con=Database::connect();
$query=$con->prepare("SELECT * from articles Where reportId=$postedValues['reportIdFromPost']");
$query=>execute();
$articlesList=$query->fetchall(PDO::FETCH_ASSOC);
?>

Вам также необходимо раскомментировать две строки в конфигурации карты:

"type" : "post",
"data" : {"reportIdFromPost" : 1}

Возможно, вы могли бы добавить параметры в параметр "url" загрузчика данных.

"url": "urlA.do?param1=" + $('.selector').val()

а затем в каком-то триггере (т.е. нажатие кнопки) измените URL и перезагрузите

var url = "same URL with different parameters values";
chart.dataLoader.url = url;
chart.dataLoader.loadData()
Другие вопросы по тегам