将jquery值传递给php以从YQL获取Weather代码


Pass jquery value to php to get Weather code from YQL

我有一个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);

编辑:对不起,我没有完全理解你的意思。看起来你把一些事情搞混了,所以让我们一步一步地看看这里发生了什么:

  1. 您可以在浏览器中键入mywebsite/kairos.php?woeid=9848
  2. 服务器解析您的脚本并将其回显到浏览器,当然,最初表单标记中只有"#",因为$_POST['WEATHER_CODE']的计算结果为空字符串,因为您没有进行POST,而是通过调用给定的URL发出GET请求
  3. 客户端从服务器获取/KAROSMOU.js并开始执行它
  4. Javascript通过调用$.getJSON获取一些数据
  5. Javascript确定"代码"的值
  6. Javascript向服务器发送$.ajaxPOST请求,再次发送到kairos.php
  7. kairos.php再次被解析,这一次是WEATHER_CODE中的数据,所以它呼应了"#30"
  8. 这个带有"#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)-你可以直接使用你的变量"代码"。