2009-06-03 42 views
0

我創建了一個允許用戶向彼此發送消息的消息系統。這工作正常,但當他們回覆我不希望他們被帶到另一個頁面,我想要一個警告說「已發送」或「未發送」。下面是我的代碼不起作用。使用ajax提交表單並返回結果

在PHP

echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply)\">"; 

的javascript:

function send(reply) 
{ 
    var httpRequest; 
    make_request() 
    function stateck() 
     { 
     if(httpxml.readyState==4) 

     { 

     alert (httpxml.responseText); 

     } 

    httpxml.onreadystatechange=stateck; 
    reply_url="compose.php?reply=" + reply.value + "&msgid="<?php echo $msgid; ?> + "&to="<?php echo $to; ?> + "&subject="<?php echo $subject; ?>"; 
    httpxml.open("GET",reply_url,true); 
    httpxml.send(null); 
    } 
} 

我使用PHP PHP變量需要從數據庫中訪問這些數據。

謝謝

回答

2

你需要告訴你在你的上返回false提交處理程序自行處理該事件的瀏覽器:

echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply); return false;\">"; 

而且您發送功能看起來是要產生一個錯誤,這將導致瀏覽器提交。您不是在任何地方分配給httpxml。我假設你真的想要:

function send(reply) { 
    var httpxml; 
    httpxml = make_request(); 
    stateck = function() { 
     if(httpxml.readyState==4){ 
      alert (httpxml.status);// you will want to check the server response code too 
      alert (httpxml.responseText);  
     } 

    }; 

    httpxml.onreadystatechange=stateck; 
    reply_url="compose.php?reply=" + reply.value + "&msgid="<?php echo $msgid; ?> + "&to="<?php echo $to; ?> + "&subject="<?php echo $subject; ?>"; 
    httpxml.open("GET",reply_url,true); 
    httpxml.send(null); 
} 
2

由於表單提交發生,它將您帶到不同的頁面。如果你不希望表單提交的發生,使用

onsubmit="send(reply); return false;" 

順便說一句,你可以使用單引號:回聲「...」,這樣你就不必逃避所有的雙引號在字符串中。

+0

感謝 但我需要提交表單...並返回什麼compose.php發送 – Elliott 2009-06-03 12:22:34

+0

你可以使用AJAX從compose.php獲取內容,但不希望表單提交發生將您帶到不同的頁面(或刷新當前頁面)。 – 2009-06-03 12:38:08

0

通常,如果你想返回通過Ajax你想要的東西,以避免頁面提交。但是,如果您希望用戶感覺他們正在提交表單,請在頁面上放置一個正常按鈕(即不是提交按鈕),作爲您的Ajax提交按鈕。將您的Ajax更新功能綁定到onclick上,並將您的PHP請求指向PHP頁面,以便在響應中發送您想要的任何結果。其他一切(將結果文本彈出到字段中等)應該只是標準的Ajax和JavaScript。