我有一个jquery函数,它从请求字符串中获取代码WOEID,并用YQL返回该城镇的当前天气。Jquery可以很好地获取代码我还使用$.ajaxPOST自行提交页面,以便将代码以纯文本打印到客户端。
问题是,在客户端页面上什么都没有显示,但在Firebug中,我可以在控制台中看到值。。。。请帮帮我,我花了这么多小时!我的php经验是初学者。。
KAIROSMOU.js文件
function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)')
.exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/'+/g, ' '));
}
// set the location's WOEID
var woeid = getParameterByName('woeid');//9848; // where on earth IDs: http://woeid.rosselliot.co.nz/
// use YQL to get restful JSON
var yql = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D' + woeid + '&format=json&diagnostics=true&callback=?';
$.getJSON(yql, function(cbfunc) {
var condition = cbfunc.query.results.channel.item.condition.text;
var code = cbfunc.query.results.channel.item.condition.code;
// the above list is not comprehensive
condition = condition.toUpperCase();
// $('body').append( condition ) ;
// $('body').append( "$" );
// $('body').append( code );
$.ajax({
type: "POST",
url: "kairos.php",
dataType : 'HTML',
data: { WEATHER_CODE: code }
}).done(function( msg ) {
});
//dont work...either
// $.ajax({
// url: "kairos.php",
// dataType: 'json',
// type: 'GET',
// data: {
// WEATHER_CODE: code }
// });
});
KAIROS.PHP我这样称呼这个页面。我的网站/kairos.php?woeid=9848
<html>
<head>
<script type='text/javascript' src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type='text/javascript' src="/KAIROSMOU.js"> </script>
</head>
<body >
<form >
<?php
$var_value = $_POST['WEATHER_CODE'];
printf("#"); // THIS WORKS APPEARS IN CLIENT
printf( $var_value ); //DONT WORK
?>
</form> </body>
</html>
这就是在FIREBUG控制台中看到的。你可以看到#30,这就是我希望客户端页面显示的内容,但徒劳。。。
<html>
<head>
<script type='text/javascript' src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type='text/javascript' src="/KAIROSMOU.js"> </script>
</head>
<body >
<form >
#30</form> </body>
</html>
这是我的客户页面
<html>
<head>
<script type='text/javascript' src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type='text/javascript' src="/KAIROSMOU.js"> </script>
</head>
<body >
<form >
#</form> </body>
</html>
据我所见,您没有在JavaScript
中的任何位置更新HTML内容。您正在使用$.ajax(…)获取一些HTML
内容,这就是您在Firebug
控制台中看到的内容,但您没有对从ajax调用中获得的内容执行任何操作。
您可能想看看:用AJAX检索的内容替换HTML页面。
但是我宁愿不使用ajax获取整个HTML内容。你可以在kairos.php中返回你想要的号码:
echo "#".$var_value;
然后在$.ajax.done函数中执行类似操作:
$("body form").html(msg);
编辑:对不起,我没有完全理解你的意思。看起来你把一些事情搞混了,所以让我们一步一步地看看这里发生了什么:
- 您可以在浏览器中键入
mywebsite/kairos.php?woeid=9848
- 服务器解析您的脚本并将其回显到浏览器,当然,最初表单标记中只有"#",因为
$_POST['WEATHER_CODE']
的计算结果为空字符串,因为您没有进行POST,而是通过调用给定的URL发出GET请求 - 客户端从服务器获取/KAROSMOU.js并开始执行它
- Javascript通过调用$.getJSON获取一些数据
- Javascript确定"代码"的值
- Javascript向服务器发送$.ajaxPOST请求,再次发送到kairos.php
- kairos.php再次被解析,这一次是WEATHER_CODE中的数据,所以它呼应了"#30"
- 这个带有"#30"的回复是您在Firebug控制台中看到的,但这只是ajax调用的结果。/KAIROSMOU.js中没有任何内容对此回复做出反应,您可以在"done"函数的参数"msg"中获得回复,但没有发生任何事情,因此Javascript结束,仅此而已
因此,我建议如下。您可以拆分PHP脚本,这样您就有了kairos.PHP(或简单的kairos.html):
<html>
<head>
<script type='text/javascript' src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type='text/javascript' src="/KAIROSMOU.js"></script>
</head>
<body>
<form id="my_result_form">
#
</form>
</body>
</html>
和第二个php脚本fetch_values.hp:
<?php
$var_value = $_POST['WEATHER_CODE'];
echo "#";
echo $var_value; // might want to sanitize this, since the POSTed data may contain all kinds of evil stuff
?>
和KAIROSMOU.js:
$.ajax({
type: "POST",
url: "fetch_values.php",
dataType : 'HTML',
data: { WEATHER_CODE: code }
}).done(function(weather_value) {
$("form#my_result_form").html(weather_value);
});
但是如果你只以这种方式使用它,那么ajax调用就没有任何意义了,因为你只是在回显你的Javascript中已经有的东西(请参见步骤5)-你可以直接使用你的变量"代码"。