2011-04-16 111 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