2011-03-08 47 views
1

我沒有得到響應的,當我嘗試從jQuery的觸發此Ajax請求:的jQuery:Ajax請求不工作

/******************************** 
CHANGE USER SETTINGS 
*********************************/ 

$(".submitUserSetting").live('click', function() { 

    //get values 
    var department = $("#us_department").val(); 
    var sortOrder = $("input[@name=us_sortOrder]:checked").val(); 

    $.ajax({ 
     type: "POST", 
     url: "lib/includes/updateUserSettings.php", 
     data: "empname=" + empname + "&department=" + department + "&sortOrder=" + sortOrder, 
     success: function(data) { 
      alert(data); 
     } 
    }); 


}); 

我的意思是什麼。沒有javascript錯誤,MySQL查詢沒有錯誤,甚至沒有在console.log中的POST數據。只是一個嘲弄的批次或沉默。即使我註釋掉PHP頁面中的所有代碼,只是回顯我發送給它的數據,也沒有。這裏的PHP頁面(類存在,職能的工作,我使用他們十幾其他網頁)

<?php 

    require_once("../classes/mysqlconnect.php"); 
    $db = new dbconnect(); 
    $db->makeConnections("TimeSheetManager"); 

    $empname = $_POST['empname']; 
    $department = $_POST['department']; 
    $sortOrder = $_POST['sortOrder']; 


    //get the department id 
    $dQuery = "SELECT id FROM departments WHERE department = '" . $department . "'"; 
    $dResults = $db->getResults($query); 
    if (mysql_num_rows($dResults) > 0) { 
     while($rows = mysql_fetch_array($dResults) { 
      $deptID = $rows['id']; 
     } 
    } 


    //update database 
    $query = "UPDATE users SET `department` = '" . $department "', `displayOrder` = '" .  $sortOrder . "' WHERE username = '" . $empname . "'"; 
    $results = $db->getResults($query); 

    if ($results) { 
     echo "!success"; 
    } else { 
     echo "!fail"; 
    } 

    ?> 

這裏的表單代碼:

<div id="userSettingsForm"> 
     <form name="userSetting"> 
      <p><label for="sortOrder">Display Order:</label></p> 
      <p class="userSettingElement">Oldest First&nbsp;<input type="radio" name="us_sortOrder" value="asc">&nbsp;&nbsp;Newest First&nbsp;<input type="radio" name="us_sortOrder" value="dsc"></p> 
      <p><label for="us_department">Department:</label></p> 
      <p class="userSettingElement"> 
       <select id="us_department" name="us_department"> 
       <option value="null">Select A Department</option> 
       <?php 

        $query = "SELECT * FROM departments"; 
        $results = $db->getResults($query); 

        while($row = mysql_fetch_array($results)){ 
         if (count($results) > 0) { 
          //get department and id 
          $department = $row['department']; 
          $deptID = $row['id']; 

          print "<option value=\"" . $deptID . "\">" . $department . "</option>"; 
         } 
        } 

       ?> 
       </select> 
      </p> 
      <p><a href="javascript:void(0);" class="submitUserSetting btn">Submit</a></p> 
     </form> 
    </div> 

感謝所有幫助和建議。我重新啓動了Firefox並且錯誤是在empname中,我沒有設置它(doh!)。白鯨加入了這個行列,但花了一點時間才清醒過來。希望我可以給大家獎勵答案。

+0

是什麼'empname'。在更新獲取表單字段上的單引號騎:例如:'更新用戶SET部門...' – kjy112 2011-03-08 15:33:23

+0

您的網站公開可用嗎?如果是這樣,你可以發佈一個鏈接到有問題的頁面嗎? – 2011-03-08 15:33:51

+0

如果爲「失敗」事件添加處理程序,是否顯示任何內容? – 2011-03-08 15:35:09

回答

2

的問題是你發送的數據的方式。

嘗試封閉財產{ } 's和不斷變化的變量格式

{ "propertyName" : "value", "propertyName" : "value" } 

data: { "empname" : empname ,"department" : department, "sortOrder" :sortOrder } 

或者如果它是一個形式,你甚至可以說

data : { $("#form").serialize() } 
+0

嘗試,仍然沒有。我可以在AJAX調用之前的任何地方做一個alert(「ok」),但是任何事情發生之後就好像js被忽略一樣。 – PruitIgoe 2011-03-08 15:55:45

+0

你是否試過使用$ .post而不是$ .ajax?它仍然使用$ .ajax,但是直接$ .ajax調用已在一些版本 – 2011-03-09 08:02:22

0

,你需要在你的PHP函數返回某個值

+0

我是(回聲「成功或」失敗「); – PruitIgoe 2011-03-08 15:52:03

4

你怎麼能告訴你沒有得到一個錯誤?添加錯誤處理程序到你的阿賈克斯()調用:

$.ajax({ 
    type: "POST", 
    url: "lib/includes/updateUserSettings.php", 
    data: "empname=" + empname + "&department=" + department + "&sortOrder=" + sortOrder, 
    success: function(data) { 
     alert(data); 
    }, 
    error: function (xmlHttpRequest, textStatus, errorThrown) { 
     alert(errorThrown); 
    } 
}); 
+0

我措辭不佳,顯然有錯誤,因爲它不起作用,我只是沒有看到在通常的地方。 – PruitIgoe 2011-03-08 15:51:43

+0

把你的代碼在那裏,我仍然沒有得到任何東西,沒有警告errorThrown,沒有提示數據... grrrr – PruitIgoe 2011-03-08 15:53:48

+0

我想接下來的一步將是得到提琴手和檢查帖子和響應。 – Keith 2011-03-08 15:56:32

2

OK,一些更多的調查顯示,這個錯誤實際上是一個奇特的組合您正在使用的代碼片段。

顯然,href="javascript:void(0)"可防止事件傳播。該事件在元素本身上觸發(所以處理程序與.click(fn)一起工作),但祖先元素未通知該事件。

由於您使用的是依賴於事件傳播的.live()方法,因此這裏不起作用。

我建議不要使用以下:

<a href="#" class="submitUserSetting btn">Submit</a> 

和JS:

$(".submitUserSetting").live('click', function(e) { 
    e.preventDefault(); // disable the link action 

    [snip] 
}); 

See jsFiddle demonstrating this.

+0

這一個爲我工作的越野車。 – Robi 2014-03-25 18:41:02