0

我有一个 jquery 函数,它从请求字符串中获取代码 WOEID,并使用 YQL 返回这个城镇的当前天气。Jquery 得到代码很好我还使用 $.ajax POST 来自我提交页面,以便以纯文本形式将代码打印到客户端。

问题是在客户端页面中没有显示任何内容,但在 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 CONSOLE 中看到的内容您可以看到 #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>     
4

1 回答 1

0

据我所知,您不会在JavaScript. 您正在HTML使用 $.ajax(...) 获取一些内容,这就是您在Firebug控制台中看到的内容,但是您没有对从 ajax 调用中获得的内容做任何事情。

您可能想看看那里:Replace HTML page with contents retrieved via AJAX

但我宁愿不使用 ajax 获取整个 HTML 内容。你可以在 kairos.php 中返回你想要的数字:

echo "#".$var_value; 

然后在 $.ajax.done 函数中执行类似的操作:

$("body form").html(msg);

编辑:对不起,我没听懂你的意思。看起来你混淆了一些东西,所以让我们一步一步看看这里发生了什么:

  1. mywebsite/kairos.php?woeid=9848在浏览器中输入。
  2. 服务器解析您的脚本并将其回显给浏览器 - 当然,最初在表单标记中只有“#”,$_POST['WEATHER_CODE']因为您没有发出 POST,而是通过调用给定的网址。
  3. 客户端从服务器获取 /KAIROSMOU.js 并开始执行它。
  4. Javascript 通过调用 $.getJSON 来获取一些数据。
  5. Javascript 确定“代码”的值。
  6. Javascript 将 $.ajax POST 请求发送到服务器,再次发送到 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.php:

<?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) - 您可以直接使用变量“代码”。

于 2013-07-14T22:57:02.680 回答