簡體   English   中英

嘗試使用AJAX將PHP中的json_encode數組轉換為Javascript函數

[英]Trying to get json_encode array from PHP with AJAX into a Javascript function

在我的PHP文件中,我創建了一個數組數組,並使用json_encode使此數組在javascript中可用。 當我在標簽內回顯此方向時,它會完美運行。 但是,我需要以固定的間隔運行PHP(我正在使用setTimeout),因此我試圖使用AJAX調用php並獲取要在javascript函數中使用的數組。

這是PHP:

$bubbles = array();
$result = mysql_query("SELECT text, lat, lng FROM bubbles");
while($row = mysql_fetch_array($result)){
$newbubble = array($row[0],$row[1],$row[2],'female-2.png');
$bubbles[] = $newbubble;
}
$js_array =  json_encode($bubbles);
echo"$js_array";

這是有問題的javascript / AJAX部分:

setTimeout(initializeMaps, 5000);

function initializeMaps() {
var markers;
var ajax;
ajax=new XMLHttpRequest();
ajax.onreadystatechange=function()
  {
  if (ajax.readyState==4 && ajax.status==200)
    {
var markers = ajax.responseText;
    }
  }
ajax.open("GET","ajax-getbubbles.php",true);
ajax.send();


/*The markers variable needs to be used in the following code*/
var iconBase = 'http://picaflora.com/uniproject/images/';
var infowindow = new google.maps.InfoWindow(), marker, i;
for (i = 0; i < markers.length; i++) {  
    marker = new google.maps.Marker({
        position: new google.maps.LatLng(markers[i][1], markers[i][2]),
        map: map,
        icon: iconBase + markers[i][3]
    });
    google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
            infowindow.setContent(markers[i][0]);
            infowindow.open(map, marker);
        }
    })(marker, i));
}
setTimeout(initializeMaps, 5000);
}

如果我alert()或console.log(),所有數據都可以從PHP返回。 但是某種程度上,腳本的其余部分似乎並沒有對變量標記做任何事情。 我對javascript不太熟悉,只是足夠熟悉,可以修補並嘗試一些事情直到它起作用,因此,如果您認為可能有更好的方法來解決問題,則一定要解決。 除非有必要,否則我現在不考慮jQuery解決方案。 謝謝!

與PHP不同,JavaScript是異步的。 您在其中執行標記操作的所有javascript代碼都將在收到響應之前立即執行。 您需要做的是將其包裝在一個函數中:

function myFunc(markers) {
     // all of your code to do stuff
}

然后在響應狀態更改時調用該函數:

ajax.onreadystatechange=function()
{
  if (ajax.readyState==4 && ajax.status==200)
  {
      var markers = ajax.responseText;
      myFunc(markers);
  }
}

您必須在javascript的末尾解碼已編碼的JSON字符串,然后才能將其用作變量。

代替

var markers = ajax.responseText;

采用

var markers = JSON.parse(markers);

嘗試這個-

setTimeout(initializeMaps, 5000);

function initializeMaps() {
    var markers;
    var ajax;
    ajax=new XMLHttpRequest();
    ajax.onreadystatechange=function(){
        if (ajax.readyState==4 && ajax.status==200){
            var markers = JSON.parse(ajax.responseText);
            update(markers);
        }
    }
    ajax.open("GET","ajax-getbubbles.php",true); 
    ajax.send();
}

function update(markers){
    var iconBase = 'http://picaflora.com/uniproject/images/';
    var infowindow = new google.maps.InfoWindow(), marker, i;
    for (i = 0; i < markers.length; i++) {  
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(markers[i][1], markers[i][2]),
            map: map,
            icon: iconBase + markers[i][3]
        });
    google.maps.event.addListener(marker, 'click', (function(marker, i) {
    return function() {
        infowindow.setContent(markers[i][0]);
        infowindow.open(map, marker);
    }
    })(marker, i));
   }    
}

PS-我不確定為什么要調用setTimeout(initializeMaps, 5000); 兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM