[英]jquery: ajax request not working
當我嘗試從 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 頁面(class 存在,功能有效,我在其他十幾個頁面上使用它們)
<?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 <input type="radio" name="us_sortOrder" value="asc"> Newest First <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.)。 Beluga 正在這樣做,但我花了一點時間才明白過來。 希望我能用答案獎勵每個人。
您怎么能知道沒有出錯? 將錯誤處理程序添加到您的.ajax()調用中:
$.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);
}
});
好的,更多調查表明該錯誤實際上是所使用的代碼的特殊組合。
顯然, 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]
});
問題是您發送數據的方式。
嘗試將屬性包含在{ } 's
,並將變量格式更改為
{ "propertyName" : "value", "propertyName" : "value" }
即
data: { "empname" : empname ,"department" : department, "sortOrder" :sortOrder }
或者,如果它是一種形式,你甚至可以說
data : { $("#form").serialize() }
您需要在php函數中返回一些值
data: "empname=" + empname + "&department=" + department + "&sortOrder=" + sortOrder,
在您的通話中定義 empname 是缺失的。
這給你 Uncaught ReferenceError
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.