我一直在用刷新我的遊戲時遇到一些問題。起初,我試着每次迴應整個劇本......但那並不美妙。現在我試圖簡單地用Ajax請求更新變量。我對Ajax代碼:使用Ajax/PHP更新Javascript變量
<script>
$(document).ready(function(){
refreshMap();
});
function refreshMap(){
$('#mapVars').load('<?php print"$game_link_play" ?>/ajax/getPrepareMap.php?id=<?php print"$game_id";?>', function(){
setTimeout(refreshMap, 5000);
});
}
</script>
getPrepareMap.php:
<?php
echo"
<script>
var nationColors = {
'DE': '#990000',
'GB': '#009999',
'FR': '#009999',
};
var nationLeaders = {
'DE': 'Adolf Hitler',
'GB': 'Winston Churchill',
'FR': 'Winston Churchill',
};
var nationPopulation = {
'DE': '81,000,000',
'GB': '54,000,000',
'FR': '64,000,000',
}
</script>
";
?>
用於加載地圖的腳本:
<script>
$(function(){
function chkLeader(val){
if (typeof val ==="undefined"){
x = "No Leader";
}
else {
x = val;
}
return x;
};
markers = [
{latLng: [52.50, 13.39], name: 'Berlin'},
{latLng: [51.5, 0.13], name: 'London'},
{latLng: [48.85, 2], name: 'Paris'}
],
cityData = [
100,
100,
100
]
map = new jvm.WorldMap({
container: $('#map'),
map: 'europe_mill_en',
backgroundColor: '#1C6BA0',
zoomOnScroll: false,
markers: markers,
regionStyle: {
initial: {
fill: '#78B6A4',
}
},
markerStyle: {
initial: {
fill: 'yellow'
}
},
series: {
regions: [{
attribute: 'fill'
}],
markers: [{
attribute: 'r',
scale: [5, 6],
values: cityData
}]
},
onRegionLabelShow: function(event, label, code){
label.html(
'<strong>' +
label.html() +
'</strong>' + '<br>' +
'<strong>' +
'Leader: ' +
'</strong>' +
chkLeader(nationLeaders[code]) + '<br>' +
'<strong>' +
'Population: ' +
'</strong>' +
nationPopulation[code]
);
}
});
map.series.regions[0].setValues(nationColors);
});
編輯:我可以得到新的變量引入頁面,但地圖不會刷新?
新代碼對於Ajax:
$(document).ready(function(){
refreshMap();
});
function refreshMap(){
$('#mapVars').load('<?php print"$game_link_play" ?>/ajax/getPrepareMap.php?id=<?php print"$game_id";?>', function(){
setTimeout(refreshMap, 5000);
});
mapReload();
}
新代碼地圖加載腳本:
$(function mapReload(){
function chkLeader(val){
if (typeof val ==="undefined"){
x = "No Leader";
}
else {
x = val;
}
return x;
};
markers = [
{latLng: [52.50, 13.39], name: 'Berlin'},
{latLng: [51.5, 0.13], name: 'London'},
{latLng: [48.85, 2], name: 'Paris'}
],
cityData = [
100,
100,
100
]
map = new jvm.WorldMap({
container: $('#map'),
map: 'europe_mill_en',
backgroundColor: '#1C6BA0',
zoomOnScroll: false,
markers: markers,
regionStyle: {
initial: {
fill: '#78B6A4',
}
},
markerStyle: {
initial: {
fill: 'yellow'
}
},
series: {
regions: [{
attribute: 'fill'
}],
markers: [{
attribute: 'r',
scale: [5, 6],
values: cityData
}]
},
onRegionLabelShow: function(event, label, code){
label.html(
'<strong>' +
label.html() +
'</strong>' + '<br>' +
'<strong>' +
'Leader: ' +
'</strong>' +
chkLeader(nationLeaders[code]) + '<br>' +
'<strong>' +
'Population: ' +
'</strong>' +
nationPopulation[code]
);
}
});
map.series.regions[0].setValues(nationColors);
});
但由於某些原因的頁面變成空白:(需要
在AJAX調用返回後,你對變量做什麼? – Barmar 2014-10-11 02:27:35
基本上,我正在加載一張地圖。我想要AJAX調用爲地圖獲取新的變量值並更新它們。我試圖把所有的Javascript放入AJAX請求中,並且它有點奏效。但問題是,如果您在另一次AJAX更新之後關閉鼠標,懸停時顯示的DIVS仍會顯示。 – user3798996 2014-10-11 02:31:25
你只是更新變量。您需要調用適當的地圖方法,使其使用新變量更新地圖。 – Barmar 2014-10-11 02:33:52