2012-11-02 81 views
0

我有一個窗體是在模態對話框中。當我提交表單時,我沒有得到來自php的迴應。我知道表單和腳本正在工作,因爲我可以在對話框之外運行它們並且一切正常。jquery ajax沒有迴應來自php

這裏是我的表單的html代碼:

<div id="add_user"> 
     <form action="resetProcess.php" method="post"> 
      <input type="hidden" name="action" value="Reset Password" /> 
      <table width="385" border="0" cellspacing="0" cellpadding="3"> 
      <tr> 
       <td colspan="3"> 
       </td> 
       </tr> 
      <tr> 
       <td width="191" align="right"><label for="firstname2">First name *</label></td> 
       <td width="194" colspan="2"><input type="text" name="firstname" id="firstname2" value="" /></td> 
       </tr> 
      <tr> 
       <td align="right"><label for="lastname2">Last name *</label></td> 
       <td colspan="2"><input type="text" name="lastname" id="lastname" value="" /></td> 
       </tr> 
      <tr> 
       <td align="right"><label for="email2">Email address *</label></td> 
       <td colspan="2"><input type="text" name="email" id="email" value="" /></td> 
       </tr> 
      <tr> 
       <td colspan="3" style="padding-top:20px;"> 
       <input type="submit" name="action1" id="requestButton" value="Get Email" /></tr> 
      </table> 
     </form> 

</div> 

下面是PHP程序文件。請記住這個工作正常,它會在它自己的瀏覽器窗口中提交。

<?php 
    // Required files 
    include("includes/common.inc.php"); 
    require_once("users.class.php"); 

    session_start(); 

// check if the reset password form has been submitted. 
if (isset($_POST["action1"]) and $_POST["action"] == "Reset Password") {  

     $user = new User(array(
     "firstname" => isset($_POST["firstname"]) ? preg_replace("/[^ \-\_a-zA-Z0-9]/", "", $_POST["firstname"]) : "",     
     "lastname" => isset($_POST["lastname"]) ? preg_replace("/[^ \-\_a-zA-Z0-9]/", "", $_POST["lastname"]) : "", 
     "email" => isset($_POST["email"]) ? preg_replace("/[^ \-\_a-zA-Z0-9]@/", "", $_POST["email"]) : "", 

    )); 

$existingUser = User::getByEmailAddress($user->getValue("email")); 

    if ($existingUser) { 
    var_dump($existingUser); 
    echo "Success!! Your Request has been sent!"; 
    } else { 
    echo "That email address does not match anyone in our system. Please go back and re-enter your information."; 
    } 
} 

?> 

這裏是包含在頭文件中的JS代碼:

  <script> 
// increase the default animation speed to exaggerate the effect 
$.fx.speeds._default = 1000; 
$(function() { 
    $("#dialog").dialog({ 
     autoOpen: false, 
     show: "fade", 
     hide: "fade", 
     width: "400px", 
    }); 

    $("#reset-form").click(function() { 
     $("#dialog").dialog("open"); 
     return false; 

    }); 

    // Hide Form error labels 
    $('.error').hide(); 

    $('#requestButton').click(function(e){ 
     e.preventDefault(); 
     var firstname = $('#firstname').val(); 
     if (firstname == "") { 
      $('label#firstname_error').show(); 
      $('label#firstname').focus(); 
      return false; 
     } 
     var lastname = $('#lastname').val(); 
     if (lastname == "") { 
      $('label#lastname_error').show(); 
      $('label#lastname').focus(); 
      return false; 
     } 
     var email = $('#email').val(); 
     if (email == "") { 
      $('label#email_error').show(); 
      $('label#email').focus(); 
      return false; 
     } 
     var dataString = 'firstname=' + firstname + '&lastname=' + lastname + '&email=' + email; 

     // ajax call 
     $.ajax({ 
      type: "POST", 
      url: "resetProcess.php", 
      data: dataString, 
      success: function(result){ 
       //$("#passRequest").fadeOut(500, function(){ 
        console.log("Result: " + result); 
       //}); 
      }, 
     });  
     return false; 
    }); 

    }); 
    </script> 

,最後我將包括類文件的查詢方法:

   public static function getByEmailAddress($email) { 
      $conn = parent::connect(); 
      $sql = "SELECT * FROM " . TBL_USERS . " WHERE email = :email"; 

      try { 
       $st = $conn->prepare($sql); 
       $st->bindValue(":email", $email, PDO::PARAM_STR); 
       $st->execute(); 
       $row = $st->fetch(); 
       parent::disconnect($conn); 
       if ($row) return new User($row); 
      } catch (PDOException $e) { 
       parent::disconnect($conn); 
       die("Query failed: " . $e->getMessage()); 
      } 
      } 

謝謝你你的幫助!!

+1

而不是var_dump - 使用回聲 – 2012-11-02 15:01:38

回答

0

爲什麼不發送這樣的數據呢?

$.ajax({ 
    type: "POST", 
    url: "resetProcess.php", 
    data: { 
     'firstname': firstname, 
     'lastname': lastname, 
     'email': email 
    }, 
    success: function(result) { 
     //$("#passRequest").fadeOut(500, function(){ 
     console.log("Result: " + result); 
     //}); 
    }, 
});​ 
+0

謝謝大家的所有輸入! – REF

0

我想你實際上是在做一個get請求,但是指定post。

在你的Ajax調用傳遞這個而不是字符串:

var data = { 
    'firstname': firstname, 
    'lastname': lastname, 
    'email': email 
} 

或者你改變你的方法後,離開GET查詢字符串,因爲它是。

0

我會檢查所需的文件被正確inlcuded /需要,

// Required files 
include("includes/common.inc.php"); 
require_once("users.class.php"); 

,因爲也許你所訪問的resetProcess.php文件不同,那麼你就沒有Ajax。您可以通過檢查User類是否確實存在來檢查它。

+0

你會如何檢查這些東西? – REF

0

問題是PHP腳本正在檢查以確保提交按鈕已通過,另一個隱藏字段也已設置。

// check if the reset password form has been submitted. 

如果(isset($ _ POST [ 「動作1」])和$ _ POST [ 「行動」] == 「重置密碼」)

這是沒有用AJAX Post請求發送。