[英]Struggling with ajax PUT request
編輯:一旦我將$(this).attr('red')傳遞給變量,就不再獲得未定義的URI。 雖然仍然出現500服務器錯誤。
編輯: 這是github上的所有代碼 (以防萬一我錯過了一些東西!)
編輯:這是在global.js中調用函數的方式
$('#userList table tbody').on('click', 'td a.linkedituser', editUser);
這是html。
<div id="wrapper">
<div id="userInfo">
<h2>User Info</h2>
<p><strong>Name:</strong> <span id='userInfoName'></span><br />
<strong>Age:</strong> <span id='userInfoAge'></span><br />
<strong>Gender:</strong> <span id='userInfoGender'></span><br />
<strong>Location:</strong> <span id='userInfoLocation'></span></p>
</div>
<h2>User List</h2>
<div id="userList">
<table>
<thead>
<tr>
<th>UserName</th>
<th>Email</th>
<th>Delete</th>
<th>Edit</th>
</tr>
</thead>
</table>
</div>
<h2>Edit User</h2>
<div id="editUser">
<fieldset>
<input id="editUserName" type="text" placeholder="Username" /><input id=
"editUserEmail" type="text" placeholder="Email" /><br />
<input id="editUserFullname" type="text" placeholder="Full Name" /><input id=
"editUserAge" type="text" placeholder="Age" /><br />
<input id="editUserLocation" type="text" placeholder="Location" /><input id=
"editUserGender" type="text" placeholder="Gender" /><br />
<button id="btnEditUser">Edit User</button>
</fieldset>
</div>
</div>
我正在嘗試將表單作為PUT請求提交,以編輯用戶信息。
提交表單時,我在Chrome控制台中收到以下錯誤。
[Error] Failed to load resource: the server responded with a status of 500 (Internal Server Error) (undefined, line 0)
錯誤的右邊顯示了ID,所以我想這與路由器端有關?
http://localhost:3000/users/edituser/53fa0acbc069f52257312d2c
這是我的客戶端功能。
function editUser(event) {
event.preventDefault();
var thisUserID = $(this).attr('rel');
var arrayPosition = userListData.map(function(arrayItem) { return arrayItem._id; }).indexOf(thisUserID);
var thisUserObject = userListData[arrayPosition];
$('#editUserName').val(thisUserObject.email);
$('#editUserEmail').val(thisUserObject.email);
$('#editUserFullname').val(thisUserObject.fullname);
$('#editUserAge').val(thisUserObject.age);
$('#editUserLocation').val(thisUserObject.location);
$('#editUserGender').val(thisUserObject.gender);
var editUser = {
'username' : $('#editUserName').val(),
'email' : $('#editUserEmail').val(),
'fullname' : $('#editUserFullname').val(),
'age' : $('#editUserAge').val(),
'location' : $('#editUserLocation').val(),
'gender' : $('#editUserGender').val(),
}
//just a test to prove that I can read the id from the db
$('body > h1').text($(this).attr('rel'));
$('#btnEditUser').on('click', function() {
$.ajax({
type: 'PUT',
url: '/users/edituser/' + thisUserID,
data: JSON.stringify(editUser),
dataType: 'json',
success: function(msg) { alert('Success'); },
error: function(err) {alert('Error'); }
}).done(function(response) {
if (response.msg === '') {
}
else {
alert('Error: ' + response.msg);
}
populateTable();
});
});
};
這是我在/routes/users.js中服務器端的路由器。
router.put('/edituser/:id', function(req, res) {
var db = req.db;
var userToEdit = req.params('id');
db.collection('userlist').findById(userToEdit, function(err, result) {
res.send((result === 1) ? { msg: '' } : { msg: 'error: ' + err });
});
});
有人可以幫忙嗎? 謝謝!
當您在網址中時,您是從主體中提取id
。
因此替換var userToEdit = req.body.id;
有:
var userToEdit = req.params.id;
或者,您可以使用req.param('id')
遍歷所有方法來找到該值。
也可以執行res.json(..)
而不是res.send(..)
。
我設法通過將$(this).attr('rel')發送到變量中來解決有關“未定義” URI的問題,以便可以從Submit click事件中檢索它。
我仍然有問題,但隨着情況的變化,我將提出一個新問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.