尝试从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]。任何想法什么我想念?
$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";
对不起,我不知道我明白。当我自己运行php文件时,它完全按照它的显示。所以当我运行_drawrating.php?id = 9时,它回来了。 – user1221768 2013-04-09 20:50:44
你发送的部分数据在url中,部分在post body中,把两部分都放在post body中。即
AJAX('starrating/_drawrating.php','id='+id,
我试过了,它仍然没有定义。也许我错过了一些功能(结果){? – user1221768 2013-04-09 20:49:40
@ user1221768只是做'callback(xmlhttp.responseText);'没有调用,并通过'$ _POST ['id']获取id' – Musa 2013-04-09 21:10:20
AJAX中的A表示异步,这意味着JS不会等待PHP数据返回。所以你不能简单地将你的AJAX调用的结果分配给一个变量,你必须注册一个函数,一旦某些数据返回就会调用该函数。这是您目前空的function(result) {}
回拨的用途。
这就像是要求某人取东西,并在此期间继续进行,而不是站到现场直到他们回来。回调函数在这个稍微晦涩的类比中记录了你打算在返回时做什么。
为什么在PHP中将字符串构建为数组,而不是将其构建为字符串? – 2013-04-09 20:44:49