尝试从ajax返回php数据

问题描述:

我对Ajax有点新,我一直在试图弄清楚哪些部分即将做错。我将结果从数据库中提取出来并引发到xml中。虽然即时通过循环的XML我尝试执行一个PHP文件,同时发送它的ID号码从XML结果,然后返回从PHP文件'回声'。林不知道如果我完全关闭或只是缺少一部分,但结果回来'未定义'。尝试从ajax返回php数据

这里是我试图得到回应和显示的PHP文件。

echo rating_bar($id); 

function rating_bar($id) { 

    //other code, but $static_rater is what gets echoed 

    $static_rater = ""; 
    $static_rater .= '<div id="ratingblock" class="ratingblock">'; 
    $static_rater .= '<div id="unit_long'.$id.'">'; 
    $static_rater .= '<ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">'; 
    $static_rater .= '<li class="current-rating" style="width:'.$rating_width.'px;"></li>'; 
    $static_rater .= '</ul>'; 
    $static_rater .= '<p class="static">Rating: <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' cast)</p>'; 
    $static_rater .= '</div>'; 
    $static_rater .= '</div>'; 

    //return join("\n", $static_rater); 
    echo $static_rater;exit; 
} 

这就是我试图返回结果的.js代码。

downloadUrl("phpsqlajax_genxml.php", function(data) { 
    var xml = data.responseXML; 
    var bounds = new google.maps.LatLngBounds(); 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    // alert("downloadUrl callback, length="+markers.length); 

    for (var i = 0; i < markers.length; i++) { 
     var id = markers[i].getAttribute("id"); 
     if (!id) id = "id "+i; 
     var name = markers[i].getAttribute("name"); 
     if (!name) name = "name "+i; 
     var address = markers[i].getAttribute("address"); 
     if (!address) address = "address"; 
     var citystate = markers[i].getAttribute("citystate"); 
     if (!citystate) citystate = "city, ST"; 
     var phone = markers[i].getAttribute("phone"); 
     if (!phone) phone = "phone number"; 
     var type = markers[i].getAttribute("type"); 
     var point = new google.maps.LatLng( 
      parseFloat(markers[i].getAttribute("lat")), 
      parseFloat(markers[i].getAttribute("lng"))); 
     bounds.extend(point); 
     var html = "<b>" + name + "</b> <br/>" + address + "<br/>" + citystate + "<br/>" + phone; //html inside InfoWindow 
     var url = "starrating/_drawrating.php?id=" + id + ""; 
     //var contentString = ajaxLoad(url, parseResults, true); 
     //var contentString = downloadUrl(url, "POST", "text=" + text, completed); 
     var contentString = AJAX('starrating/_drawrating.php','id='+id, 
      function(data) { 
       var htm = $("#ratingblock").html(data); 
       alert(htm); 
      } 
    ); 

     var description = "<br><br>description" + id + " <br><b>" + name + "</b> <br/>" + address + "<br/>" + citystate + "<br/>" + phone; //html inside InfoWindow 
     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon, 
      shadow: icon.shadow, 
      animation: google.maps.Animation.DROP 
     }); 
     bindInfoWindow(marker, map, infoBubble, html, description, contentString); 
    } 
}); 


function AJAX(url, data, callback) 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     callback(xmlhttp.responseText); 
    } 
} 
xmlhttp.open("POST",url,true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send(data); 

}

编辑:好了,所以我一直用这个玩弄和更新上面我的代码。现在,当我运行这个使用Firebug我可以看到的帖子,响应是这样的:

<div id="ratingblock" class="ratingblock"><div id="unit_long10"><ul id="unit_ul10" class="unit-rating" style="width:150px;"><li class="current-rating" style="width:0px;"></li></ul><p class="static">Rating: <strong> 0.0</strong>/5 (0 votes cast)</p></div></div> 

但警告只是说的翻译:和信息窗口说[对象的对象。所以我知道它的调用和返回数据,而且我搜索并尝试了所有我能想到的内容,以使上面的部分在infowindow中正确显示。有什么想法吗?

编辑#2

林尝试下面的新方法。

var contentString = $.ajax({ 
          type:"POST", 
          url: "starrating/_drawrating.php", 
          dataType: "html", 
          data:"id="+id, 
          success: function(data){ 
            var $response=$(data); 
            $response.find('ratingblock').html(); 
            console.log($response); 
           } 
         }); 

控制台返回“Object [div#ratingblock.ratingblock]”,但结果仍然是[object object]。任何想法什么我想念?

+0

为什么在PHP中将字符串构建为数组,而不是将其构建为字符串? – 2013-04-09 20:44:49

$static_rater是一个数组,您不能使用连接运算符。

$static_rater[] = "\n".'<div class="ratingblock">'; 
$static_rater[] = '<div id="unit_long'.$id.'">'; 
$static_rater[] = '<ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">'; 
$static_rater[] = '<li class="current-rating" style="width:'.$rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>'; 
$static_rater[] = '</ul>'; 
$static_rater[] = '<p class="static">'.$id.'. Rating: <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' cast)</p>'; 
$static_rater[] = '</div>'; 
$static_rater[] = '</div>'."\n\n"; 
+0

对不起,我不知道我明白。当我自己运行php文件时,它完全按照它的显示。所以当我运行_drawrating.php?id = 9时,它回来了。 – user1221768 2013-04-09 20:50:44

你发送的部分数据在url中,部分在post body中,把两部分都放在post body中。即

AJAX('starrating/_drawrating.php','id='+id, 
+0

我试过了,它仍然没有定义。也许我错过了一些功能(结果){? – user1221768 2013-04-09 20:49:40

+0

@ user1221768只是做'callback(xmlhttp.responseText);'没有调用,并通过'$ _POST ['id']获取id' – Musa 2013-04-09 21:10:20

AJAX中的A表示异步,这意味着JS不会等待PHP数据返回。所以你不能简单地将你的AJAX调用的结果分配给一个变量,你必须注册一个函数,一旦某些数据返回就会调用该函数。这是您目前空的function(result) {}回拨的用途。

这就像是要求某人取东西,并在此期间继续进行,而不是站到现场直到他们回来。回调函数在这个稍微晦涩的类比中记录了你打算在返回时做什么。