所以我一定错过了什么。我可以检索 zpid 和 zestimate,执行以下操作没有问题:
$zdata->response->zpid; //zpid
$zdata->response->zestimate->amount; //zestimate
但是,当我尝试似乎明显等效于检索地址的一部分时:
$zdata->response->address->street;
$zdata->response->address->city;
都行不通!为什么??显然,我在这里一定错过了什么。下面是我的完整代码
<?php
$zillow_id = '1234';
$search = $_POST['address'];
$citystate = $_POST['csz'];
$address = urlencode($search);
$citystatezip = urlencode($citystate);
$url = "http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=".$zillow_id."&address=".$address."&citystatezip=".$citystatezip;
$result = file_get_contents($url);
$data = simplexml_load_string($result);
$zpidNum = $data->response->results->result[0]->zpid;
$zurl = "http://www.zillow.com/webservice/GetZestimate.htm?zws-id=".$zillow_id."&zpid=".$zpidNum;
$zresult = file_get_contents($zurl);
$zdata = simplexml_load_string($zresult);
//echo $zdata->response->zestimate->amount;
//$zestimate=$zdata->response->zestimate->amount;
$zstreet=$zdata->response->address->street;
echo $street;
?>
查看 Zillow 自己的文档中看到的 XML 输出,我遵循相同的模式来尝试获取街道和获取 zestimate。我对使用 XML 不是很熟悉,所以很可能我错过了一些东西。
所以我在控制台中收到一个错误,显示以下内容:
未捕获的语法错误:意外的标记 T
"T"似乎是输入的街道的第一个字母,因为它会相应地变化。也许这可以揭示这个问题?
我也会发布我的 AJAX,但我不知道为什么它会出错。如上所述,我能够很好地显示 ZPID 和 Zestimate,只是地址不起作用。
AJAX/JS:
function validateAddress(){
var address = document.getElementById('address').value;
var csz = document.getElementById('city_state_zip').value;
if (address == null || address == "" || csz == null || csz == "") {
return false;
}
else{
getZestimate(address,csz);
}
}
function getZestimate(address,csz){
var xmlhttp = new XMLHttpRequest();
var userdata = "address="+address+"&csz="+csz;
xmlhttp.open("POST","../wp-content/themes/realhomes/submit_address.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
//retrieve = JSON.parse(xmlhttp.responseText);
retrieve = xmlhttp.responseText;
document.getElementById("zestimateArea").innerHTML = '<div id="zillowWrap"><a href="http://www.zillow.com"><img src="http://www.zillow.com/widgets/GetVersionedResource.htm?path=/static/logos/Zillowlogo_150x40.gif" width="150" height="40" alt="Zillow Real Estate Search" id="ZillowLogo" /></a><span id="zestimateTag">Zestimate®</span></div><span id="zestimatePrice">'+retrieve+'</span><div id="zillowDisclaimer"><span>© Zillow, Inc., 2006-2014. Use is subject to <a href="http://www.zillow.com/corp/Terms.htm">Terms of Use</a></span><span>What’s a <a href="http://www.zillow.com/wikipages/What-is-a-Zestimate">Zestimate?</a>';
}
else{
document.getElementById("zestimateArea").innerHTML = "Error!"
}
}
xmlhttp.send(userdata);
document.getElementById("zestimateArea").innerHTML = "Generating...";
return false;
}
当我去发布我的 AJAX 作为最后的帮助努力时,我看到我仍然有这样一行代码:
retrieve = JSON.parse(xmlhttp.responseText);
正如代达罗斯(Daedalus)所解释的那样,当我检索整数时,这不是问题,但在检索文本时却带来了问题。我最初是在尝试将Zestimate和地址一起检索到使用JSON编码的数组中时放入的。当它不成功时,我退后一步,看看我是否可以单独检索地址而没有成功。我从来没有对这行代码三思而后行,因为 AJAX 似乎仍然可以正常工作。
因此,结果令人困惑。
将该行更改回:
retrieve = xmlhttp.responseText;
允许我成功检索地址。
你不是有简单的错误导致巨大的问题吗?回到弄清楚为什么 JSON 编码和解析不起作用,但这是另一篇文章的问题。