2014-09-02 83 views
0

我正在使用JQVMaps在WordPress网站上创建世界地图。我需要根据用户点击的区域生成页面内容。以下是我迄今为止的概念证明:AJAX动态页面内容与地图区域

<div id="post"></div> 
    <script> 
     jQuery('#vmap').vectorMap({ 
      map: 'world_en', 
      backgroundColor: '#fff', 
      borderColor: '#bbb', 
      borderOpacity: 1, 
      borderWidth: .2, 
      color: '#bbb', 
      onRegionOver : function (element, code, region) 
      { 
       highlightRegionOfCountry(code); 
      }, 
      onRegionOut : function (element, code, region) 
      { 
       unhighlightRegionOfCountry(code); 
      }, 
      onRegionClick: function(element, code, region) 
      { 
       highlightRegionOfCountry(code); 
       $.ajax('/get_chart_data.php', { 
        dataType: 'json', 
        success: function(response) { 
         var jspost = "<?php echo $post; ?>"; 
         var el = document.getElementById("post"); 
         el.html = jspost; 
        } 
       }); 
      } 
     }); 
    </script> 

这里就是我在get_chart_data.php:

<?php 

    // Switch based on region 
    switch($_REQUEST['region']) { 
     case China: 
     $post = 'You clicked China'; 
     break; 
     case Canada: 
     $post = 'You clicked Canada'; 
     break; 
     case Brazil: 
     $post = 'You clicked Brazil'; 
     break; 
    } 

    echo json_encode($post); 
?> 

我越来越没有从地图响应。我对AJAX非常陌生,所以我希望能够通过它获得所有帮助。我可能会错过一个非常关键的部分。

回答

1

当你说“没有来自地图的回应”时,你的意思是你的highlightRegionOfCountry和unhighlightRegionOfCountry正在工作,而且这只是说你的ajax调用不工作?你想要的是你的PHP脚本中的$ post变量的值是否在你的元素内?

如果出现这种情况,我认为您在jQuery ajax调用中如何接收数据有点困惑。您不会通过将php代码放入JavaScript代码中收到它,您会在传递给您的成功回调函数的数据中,在变量“响应”中接收它,就像您拥有它。此外,您必须将点击的代码作为ajax调用中的数据传递。另外,你不能在dom元素上使用简单的“html”属性,所以我会改变它。所以,你的Ajax调用应改为类似:

$.ajax({ 
    url: "/get_chart_data.php", 
    data: { 
     region: region 
    }, 
    success: function(response) { 
     $("#post").html(response); 
    } 
}); 

而且这是一个更好的做法是引用你的字符串在PHP,所以不是如案例中国:,用例'中国':等等。

+0

太棒了。我还添加了$ post = new stdClass();在get_chart_data和echo json_encode($ post)的顶部;至底部。不知道这是否有必要。 – 2014-09-02 16:33:21

+1

当你刚刚返回一个单一的字符串时,这不是绝对必要的。但很快你可能会返回更复杂的数据,在这种情况下,你会想要创建一个php对象或关联数组,然后对其进行json_encode,所以很好,你已经这么做了。 – 2014-09-04 19:52:44