2010-08-01 63 views
1

我卡住了。ajax與HTML表格調用將無法正常工作

這就像腳本根本沒有任何功能。

 <script> 
      $("#continue").click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "dbc.php?check=First", 
      data: {full_name : $('#full_name').val() 
       usr_email : $('#usr_email').val()}, 
      success: function(msg){ 
       if(msg==1){ 
        $("#First_1").hide(); 
        $("#Next_2").toggle(); 
       }else{ 
        alert(msg) 
       }    
      } 
     }); 
     return false; 
    }); 
     </script> 

     <form action="index.php?page=checkin" method="post" name="regForm"> 
    <div id="First_1"> 
    <table width="100%" cellpadding="0" cellspacing="0"> 
         <tr> 
          <td> 
           <table cellpadding="0" cellspacing="5"> 
            <tr> 
         <td style="padding: 5px;"> 
         Fullständiga namn: 
         </td> 
         <td> 
         <input name="full_name" type="text" id="full_name" class="required"> 
         </td> 
            </tr> 
            <tr> 
         <td style="padding: 5px;"> 
         Email: 
         </td> 
         <td> 
         <input name="usr_email" type="text" id="usr_email" class="required email"> 
         </td> 
            </tr> 
            <tr> 
         <td style="padding: 5px;"> 
         Sex: 
         </td> 
         <td> 
         <select name="sex"> 
         <option value="male">Kille</option> 
         <option value="female">Tjej</option> 
         </select> 
         </td> 
            </tr> 
         <td> 
         <input type="submit" id="continue" value="Continue"> 
         </td> 
       </table> 
     </td> 
      </tr> 
    </table> 
</div> 

有了這個,當我按下繼續它應該發送ajax調用,但它沒有。當我按下繼續時,它只是把我的形式的行動=「index.php?page = checkin」,即使他們返回false;點擊(在腳本中)?我甚至試圖改變表單行並插入onsubmit =「return false;」但是當我點擊按鈕時什麼也沒有發生。

回答

0

對我來說聽起來像是一個錯字,它看起來像在你的數據字段中。

我建議做

data: "value1="+$("#val1").val()+"&value2="+$("#val2").val() 

而且調試JavaScript是打開Chrome瀏覽器的控制檯或在Firefox中使用firebugs控制檯,當您執行操作它通常會通知您的問題或缺少的好辦法它們。

最後一個注意事項:我建議在從php返回時使用json,這樣可以爲用戶提供更多的照顧消息。例如,假設您的表單不驗證服務器端(您正在驗證服務器端是否正確?),您可以返回給客戶端一個不錯的消息,向他們解釋它沒有驗證。這個怎麼做?

$.ajax({ 
      type: "POST", 
      url: "dbc.php", 
      data: "val1="+$(#val1).val()+"&val2="+$(#val2).val(), 
      success: function(json){ 
       if(json.error){ 
        //notify user of error message 
        $(#statusDiv).(json.message); 
       }else{ 
        //perform success 

       }    
      } 
     }); 

而在服務器端使用的東西,如

echo json_encode(array("error"=>1, "message"=>"<insert validation problems here>")); 

成功函數這將通過json.error,或json.message訪問。

+0

好吧我現在改爲:\t data:「full_name =」+ $(「#full_name」).val()+「&usr_email =」+ $(「#usr_email」).val()當我在fierfox控制檯中看到它說,缺少}屬性列表後,成功:功能(味精){..這是什麼意思,我不能看到哪裏theres缺少一個} – Karem 2010-08-01 11:02:59

+0

粘貼您的代碼請 – Chris 2010-08-01 11:13:34

+0

http://phpbin.net/ x/1363623696 – Karem 2010-08-01 11:15:57

2

的問題是它做的默認操作,因爲沒有你的jQuery代碼運行:)當你的代碼運行時,id="continue"元素現在還沒有,所以$("#continue")未發現任何一個click處理程序綁定到。這是一個簡單的辦法,換你的代碼中調用document.ready,像這樣:

$(function() { 
    $("#continue").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "dbc.php?check=First", 
     data: {full_name : $('#full_name').val() 
      usr_email : $('#usr_email').val()}, 
     success: function(msg){ 
      if(msg==1){ 
       $("#First_1").hide(); 
       $("#Next_2").toggle(); 
      }else{ 
       alert(msg) 
      }    
     } 
    }); 
    return false; 
    }); 
}); 

通過這樣做,它會等到DOM是準備好了,你的元素那裏找到/結合。此外,而不是連接到#continue按鈕的click事件,它通常是更好地附着在窗體的submit處理程序,所以它抓住了那裏,所以不是這樣的:

$("#continue").click(function() { 

你可以這樣做:

$("form[name='regForm']").submit(function() { 

一切都保持不變。

+0

我現在有我的代碼,我仍然沒有結果,它仍然需要我來形成行動,是否有任何特殊的地方,我應該有代碼?並且附帶它的形式提交處理程序的建議,它是一個不,因爲正如你在代碼中看到的,表單提交是在div#Next_2中,那個被切換。該調用用於檢查full_name和usr_email是否有效。 – Karem 2010-08-01 11:08:31

+0

@Karem - 你可以在'submit'上檢查所有這些......這就是jQuery驗證插件的工作原理,例如:)你是否收到任何JavaScript錯誤?它仍然表現得好像您的代碼運行不正確,錯誤並未附加,檢查控制檯是否有錯誤,並查看是否有任何錯誤。 – 2010-08-01 11:21:51

+0

我得到這個:失蹤}屬性列表後,成功:功能(味精){ – Karem 2010-08-01 11:49:15

0

在新的代碼上phpbin您需要的行後一個逗號:

data: "full_name="+$("#full_name").val()+"&usr_email="+$("#usr_email").val(), // <-- COMMA HERE 

或者,在你的舊代碼(這是更好,因爲你不必處理串聯數據URL自己)你失蹤逗號也,兩線之間:

data: {full_name : $('#full_name').val(), // <-- COMMA HERE 
     usr_email : $('#usr_email').val()}, 

另外,你需要一個分號此行之後:

alert(msg); // <-- SEMICOLON HERE 

;)

+0

它現在開始工作,我相信,雖然當我按下繼續,現在我得到一個警報沒有任何內容?我的意思是沒有錯誤信息。爲什麼?這裏是dbc.php?check = First http://phpbin.net/x/249121011 – Karem 2010-08-01 14:09:25

+0

PHP端可能有錯誤?如果出現錯誤,爲什麼不回顯其他語句 - 在最後一個if後添加else語句if(empty($ err)){echo 1;} else {echo「there was an error」;} – 2010-08-01 14:43:06