作者 主題: 有關AJAX - PHP 資料傳送問題  (閱讀 7594 次)

0 會員 與 1 訪客 正在閱讀本文。

abcabc

  • 可愛的小學生
  • *
  • 文章數: 12
    • 檢視個人資料
有關AJAX - PHP 資料傳送問題
« 於: 2009-03-01 17:36 »
各位大大, 你們好
我的問題是"什麼原因導致AJAX SEND 出的GET VALUE變成NULL
小弟正嘗識寫一個網頁遊戲
為了方便處理AJAX的問題
我把AJAX的FUNCTION一分為二: ajax(), ajax2()
ajax() 能正常運作, (SEND AND RESPONSE...)
可是ajax2()有時會有失敗的情況 (ajax2() 是用來UPDATE 資料庫沒有RESPONSE TEXT)
失敗原因我想大概是$_GET["mx"], $_GET["my"] 裡面的值沒有了
我嘗試利用以下內容取代ajax2()裡的內容:
var xxx = "update.php?mx="+mX+"&my="+mY;
myWindow=window.open(xxx,'','width=200,height=100');
結果成功UPDATE 資料庫,
至於ajax2(), 有關的FUNCTION 如下:
<script>
...
function ajax2()
{
 
  xmlHttp1=GetXmlHttpObject1();
   if (xmlHttp1==null)
   {alert ("Browser does not support HTTP Request"); return;}
   var url="update.php";
   url=url+"?mx="+mX;
   url=url+"&my="+mY;
   xmlHttp1.onreadystatechange=stateChanged1;
   xmlHttp1.open("GET",url,true);
   xmlHttp1.send(null);
}
//-------------------------------------------------------------
function GetXmlHttpObject1(){
var xmlHttp1=null;try{xmlHttp1=new XMLHttpRequest();}catch (e){try{xmlHttp1=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){xmlHttp1=new ActiveXObject("Microsoft.XMLHTTP");}}return xmlHttp1;}
//-------------------------------------------------------------
function stateChanged1() // << 這個好像是可有可無不過還是加進去  ;D
{
   if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
   {
      fake = xmlHttp.responseText; 
   }
}
</script>
</head>

<body ... onMouseDown="ajax2()">
...
« 上次編輯: 2009-03-01 17:40 由 abcabc »

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #1 於: 2009-03-02 09:51 »
稍微改了一下,這樣是可以跑的,你看一下問題在哪裡:
代碼: [選擇]
<html>
<script>
var mX = 101;
var mY = 202;
function ajax2()
{
 
  xmlHttp1=GetXmlHttpObject1();
   if (xmlHttp1==null)
   {alert ("Browser does not support HTTP Request"); return;}
   var url="test429.php";
   url=url+"?mx="+mX;
   url=url+"&my="+mY;
   xmlHttp1.onreadystatechange=stateChanged1;
   xmlHttp1.open("GET",url,true);
   xmlHttp1.send(null);
}
//-------------------------------------------------------------
function GetXmlHttpObject1(){
var xmlHttp1=null;try{xmlHttp1=new XMLHttpRequest();}catch (e){try{xmlHttp1=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){xmlHttp1=new ActiveXObject("Microsoft.XMLHTTP");}}return xmlHttp1;}
//-------------------------------------------------------------
function stateChanged1() // << 這個好像是可有可無不過還是加進去 
{
   if (xmlHttp1.readyState==4 && xmlHttp1.status==200)
   {
      fake = xmlHttp1.responseText;
      alert(fake);
   }
}
</script>
<body onmousedown="ajax2()">
</body>
</html>
(我的php檔名是test429.php,這應該不是問題。)
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #2 於: 2009-03-02 10:37 »
有用那個 JAVASCRIPT  FRAMEWORK 嗎?

abcabc

  • 可愛的小學生
  • *
  • 文章數: 12
    • 檢視個人資料
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #3 於: 2009-03-02 11:22 »
RE fillano 大大:
我後來把這個xmlHttp.readyState==4 換成 xmlHttp1.readyState==4了  ;D

不過我發現了真正問題是相同的url有時會出現前一個的結果
例如:
url: test429.php?mx=3&my=1
在11:16am的result是: mx(38) my(1) time(11:16)
url: test429.php?mx=3&my=1
在11:17am的result竟然也是: mx(38) my(1) time(11:16)
這個問題可以怎樣解決??
------------------------------
RE micmic3 大大:
應該沒有..我用notepad寫的
其實javascript framework 是什麼 @_@?
小弟是新手不太清楚javascript framework 的意思, 剛才到google查了一下..
是指Dojo 、Scriptaculous 、Prototype 、yui-ext 、Jquery 、Mochikit、mootools 、moo.fx 這類軟件嗎?

« 回覆文章 #3 於: 今天 11:22 »
________________________________________________

我想到解決方法了 :D
就是在url後面再加一個時間
(現在去測試)
« 最後編輯時間: 今天 11:38 由 abcabc »
_________________________________________________

失敗了 :(
« 上次編輯: 2009-03-02 11:50 由 abcabc »

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #4 於: 2009-03-02 12:05 »
要做網頁遊戲?你要考慮到幾個問題:
  • cache
  • 時間是用伺服器端還是客戶端取得的?
  • ajax非同步處理的時候,執行順序有可能是無法保證的(網路延遲等等)
  • javascript是基於單一執行緒的,他的非同步執行(ajax,setTimeout,setInterval,eventHandler等)是用一個像是環狀queue的方式來模擬的,不可以誤解為multi-thread,所以執行的時間精確性可能無法保障

Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

abcabc

  • 可愛的小學生
  • *
  • 文章數: 12
    • 檢視個人資料
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #5 於: 2009-03-02 12:21 »
感謝fillano 大大提醒, 我的問題就在cache  ;D

ricky

  • 實習板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #6 於: 2009-03-03 11:19 »
Server端可以透過
header('Cache-Control:no-cache');
強制瀏覽器不要快取內容
不過IE6沒用,他沒遵循 HTTP 協定標準
一勞永逸的解決方式
就只有變更request url,讓瀏覽器覺得他是存取不同的頁面,就不會讀取快取資料了
var url="test429.php"; -> url="test429.php?"+randnumber;
randomnumber 就可以隨機產生一個亂數,在每次AJAX request時動態產生
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

abcabc

  • 可愛的小學生
  • *
  • 文章數: 12
    • 檢視個人資料
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #7 於: 2009-03-03 22:22 »
Server端可以透過
header('Cache-Control:no-cache');
強制瀏覽器不要快取內容
不過IE6沒用,他沒遵循 HTTP 協定標準
一勞永逸的解決方式
就只有變更request url,讓瀏覽器覺得他是存取不同的頁面,就不會讀取快取資料了
var url="test429.php"; -> url="test429.php?"+randnumber;
randomnumber 就可以隨機產生一個亂數,在每次AJAX request時動態產生

假如randnumber 不幸重複也會出現相同的情況嗎  ::)
« 上次編輯: 2009-03-03 22:41 由 abcabc »

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #8 於: 2009-03-03 22:47 »
那就不要讓他重複阿...

怕random還會重複,那就另外加上new Date().getTime()。
« 上次編輯: 2009-03-03 22:56 由 fillano »
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 有關AJAX - PHP 資料傳送問題
« 回覆 #9 於: 2009-03-04 00:03 »
不在乎長一點的話, 可以參考這個的第一個範例  :D :D

http://tw2.php.net/manual/en/function.uniqid.php