Javascript 与ajax PUT请求抗争

Javascript 与ajax PUT请求抗争,javascript,jquery,ajax,express,Javascript,Jquery,Ajax,Express,编辑:一旦我将$(this.attr('red')传递给变量,就不再获取未定义的URI。但是仍然会出现500服务器错误 编辑:(以防万一我错过了什么!) 编辑:下面是在global.js中调用函数的方法 $('#userList table tbody').on('click', 'td a.linkedituser', editUser); 这是html <div id="wrapper"> <div id="userInfo"> <h2&g

编辑:一旦我将$(this.attr('red')传递给变量,就不再获取未定义的URI。但是仍然会出现500服务器错误

编辑:(以防万一我错过了什么!)

编辑:下面是在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>
错误右侧显示的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
,而该id位于url中

因此,替换
var userToEdit=req.body.id带有:

var userToEdit = req.params.id;
或者您可以使用
req.param('id')
来查找值


也可以使用
res.json(..)
而不是
res.send(..)
我通过将$(this.attr('rel')发送到一个变量中来解决有关“未定义”URI的问题,以便可以从submit click事件中检索它


我仍然有问题,但将打开一个新问题,因为很多问题已经改变。

如果它没有定义,那么
$(this)。attr('rel')
没有返回任何内容……让我们也看看HTML。@apsillers如果我使用上面的anon函数,我可以得到rel值(对象ID)来提醒。对于ref,它显示值“53fa0acbc069f52257312d2c”。@Kenny我已经按照请求包含了HTML。这一个一直让我感到困惑,我通常会忘记使用参数,并意外地使用body或query;)谢谢你,我仍然有这个问题,但我很快就会遇到这个问题我将编辑我的问题以包含您的更改。
var userToEdit = req.params.id;