2011-04-16 110 views
0

我再次有一个javascript的小问题(我是一个真正的noob在这方面)。这次我想在页面加载时加载一个AJAX函数,以便将一些javascript变量保存到php会话中。我想出了这是将javascript vars传递给php的最佳方式。如果有更好的方法(除了饼干),不要犹豫,让我知道:)JavaScript +加载页面加载AJAX功能+将Javascript增量传递到PHP

现在我想:

-pass JavaScript变数外部PHP页面在页面加载
- 保存变量在PHP
次使用不pagereload


这里的PHP变量是我的脚本至今:

$(document).ready(function() { 
    function save_visitor_details() { 
     $(function() { 
      var visitor_country = geoip_country_name(); 
      var visitor_region = geoip_region_name(); 
      var visitor_lat = geoip_latitude(); 
      var visitor_lon = geoip_longitude(); 
      var visitor_city = geoip_city(); 
      var visitor_zip = geoip_postal_code(); 
      var dataString = 'visitor_country='+ visitor_country +'&visitor_region='+ visitor_region +'&visitor_lat='+ visitor_lat +'&visitor_lon='+ visitor_lon +'&visitor_city='+ visitor_city +'&visitor_zip='+ visitor_zip; 
      $.ajax({ 
       type: "POST", 
       url: "inc/visitor_details.php", 
       data: dataString, 
       success: function(res) { 
         alert ("saved"); 
         //$('#result').html(res);<-- should contain variables from inc/visitor_details.php 
        }); 
       } 
      }); 
      return false; 
     } 
}); 


在此先感谢!

编辑:我改变了一点,并通过将javascript变量添加到隐藏窗体中,使用上面的ajax脚本提交表单并将变量保存到后端php文件中的php会话数组中。

感谢any1为您的时间!

+0

哪里是PHP变量?在'nc/visitor_details.php'上? – diEcho 2011-04-16 12:11:02

+0

什么是实际问题,因为我看到这个脚本没有错误。 – Khez 2011-04-16 12:11:02

+0

嗨,伙计们,PHP变量是“生成”在“inc/visitor_details.php”。该脚本不适用于我,因为当我加载index.php时,变量没有保存到php,并且警报没有被触发。 (至少它现在不适合我) – Andrej 2011-04-16 12:23:23

回答

0

我真的不明白这里有什么问题。但这里有一些建议。

  • ,而不是你自己序列化的数据,你应该宁可让jQuery的为你做的:

    $.post('inc/visitor_details.php', {country: geoip_country_name() /* stuff */}, function(data) { 
        alert('ok!'); alert(data); 
    }); 
    
  • 意识到,通过使用Javascript传递数据到服务器,用户可以发送无论他们想要什么数据,包括假数据。所以要小心处理。

然后整个过程可能是这样的:

/* javascript */ 
$(document).ready(function() { 
    function save_visitor_details() { 
     $.post('inc/visitor_details.php', { 
      country: geoip_country_name(), 
      region: geoip_region_name(), 
      lat: geoip_latitude(), 
      lon: geoip_longitude(), 
      city: geoip_city(), 
      zip: geoip_postal_code() 
     }, function(data) { 
      /* do whatever you want here */ 
      alert(data); 
     }, 'json'); 
    } 

    save_visitor_details(); 
}); 

/* PHP */ 
<?php 
$keys = array('country', 'region', 'lat', 'lon', 'city', 'zip'); 
$output = array(); 

foreach($keys as $key) { 
    do_some_stuff($_POST[$key]); 
    $output[$key] = $_POST[$key]; 
} 

header('Content-type: text/plain; charset=utf-8'); 
echo json_encode($output); 
?> 
+0

嗨Zopieux,感谢您的快速回复。我给你一个例子,我想在最后:访问者在index.php - > javascript获取他的信息并将它们保存到变量 - >保存的变量发送到visitor_details.php - >发送的变量保存为PHP变量 - > PHP变量返回到index.php - 一切从访客没有页面重新加载。 – Andrej 2011-04-16 12:22:06

0

的JavaScript:

var http = createRequestObject() ; 

function createRequestObject(){ 
    var obj; 
    var browser = navigator.appName; 

    if(browser == "Microsoft Internet Explorer"){ 
     obj = new ActiveXObject("Microsoft.XMLHTTP"); 
    }else{ 
     obj = new XMLHttpRequest(); 
    } 
    return obj; 
} 

function sendReq(str){ 
    http.open('get', str); 
    http.onreadystatechange = handleResponse; 
    http.send(null); 
} 

sendReq("someurl?var=yourvar"); 

PHP的:

$var = $_GET['var']; // use some security here. 
+0

他已经在使用jQuery,我没有看到在这里处理XMLHTTP的东西。而且,他似乎想要使用POST。 – zopieux 2011-04-16 12:57:02

+0

感谢zozo,但我想出了一个不同的解决方案。看到我的帖子上面。 – Andrej 2011-04-16 20:16:14