Php 为什么我的ajax无法在输入表单中获取当前键入的字符串?

Php 为什么我的ajax无法在输入表单中获取当前键入的字符串?,php,jquery,ajax,Php,Jquery,Ajax,我有一个简单的表单,然后将表中的一些数据放到每个输入表单的value属性中。现在我的问题是,每当我在输入表单中输入新的内容时,为了更新数据,它都无法提取当前键入的字符串,我不知道如何解决这个问题,因为我认为它在这个更新页面上提取的是回显的值,而不是当前键入的字符串 这是我的前端 <fieldset id="personaldetails"> <legend>Personal Details</legend> Resume Title:

我有一个简单的表单,然后将表中的一些数据放到每个输入表单的value属性中。现在我的问题是,每当我在输入表单中输入新的内容时,为了更新数据,它都无法提取当前键入的字符串,我不知道如何解决这个问题,因为我认为它在这个更新页面上提取的是回显的值,而不是当前键入的字符串

这是我的前端

    <fieldset id="personaldetails">
    <legend>Personal Details</legend>
    Resume Title: <input type="text" name="resumetitle" id="resumetitle" value="<?php echo $v['ResumeTitle']; ?>" size="50" maxlength="50" /><br />
    Name: <input type="text" name="cvname" id="cvname" size="30" maxlength="30" value="<?php echo $v['Name']; ?>" /><br />
    DOB: <input type="text" id="datepicker" name="dob" value="<?php $date = new DateTime($v['DOB']); echo $date->format('m/d/Y'); ?>" /><br />
    Gender:  <input type="radio" name="gender" id="gender-male" value="1" <?php if($v['Gender'] == 1){ echo "checked"; } ?>/> <b>Male</b> |
     <input type="radio" name="gender" id="gender-female" value="0" <?php if($v['Gender'] == 0){ echo "checked"; } ?>/> <b>Female</b><br /><br />
    <input type="hidden" name="cvid" id="cvid" value="<?php echo $v['ResumeID']; ?>" />
    <button name="pdetails" id="pdetails">Update</button>
    </fieldset><br /><br />
//这是我的php代码

require 'class.resume.php';

$db = new Resume();

if(isset($_POST['resumetitle']) || isset($_POST['name']) || isset($_POST['dob']) ||
   isset($_POST['gender']) || isset($_POST['cvid'])){
    $result =  $db->updatepdetails($_POST['resumetitle'],$_POST['name'],$_POST['dob'],$_POST['gender'],$_POST['cvid']);
    if($result){
      echo "success!";
    } else {
      echo "failed! ".$db->error;
    }
   }

javascript只解析表单值一次(在页面加载时),因此,如果在页面加载后输入一些内容,变量不会改变

您可以简单地计算Ajax回调中的值。但是您真正应该做的是使用jQuery的函数,它创建一个标准的
a=1&b=2&c=3
querystring,包括(正确转义的)表单数据:

$(function(){
  $('button#pdetails').click(function(){
    $.ajax({
      type: "POST",
      url: "classes/ajax.resumeupdate.php",
      data: $('form').serialize(),
      success: function(){
        //window.location = "resumeview.php?cvid="+cvid;
      }
    });
  });
});

还请注意,success函数后面有一个逗号,因此我也对其进行了更改。

如果只读取document ready上的值,请将该代码移动到click事件中:

$(document).ready(function(){
   $('button#pdetails').click(function(){
     var resumetitle = $('#resumetitle').val();
     var cvid = $('input[type="hidden"]').val();
     var name = $('#cvname').val();
     var dob = $('#datepicker').val();
     var gender = $('input[name="gender"]:checked').val();
     $.ajax({
       type: "POST",
       url: "classes/ajax.resumeupdate.php",
       data: "resumeid="+cvid+"&resumetitle="+resumetitle+"&name="+name+"&dob="+dob+"&gender="+gender,
       success: function(){
           //window.location = "resumeview.php?cvid="+cvid;
       },
     });
   });
});

好的,我现在得到的值是正确的。但是它无法更新表数据。如何在firebug控制台响应选项卡上输出mysql错误?。因为我在响应中只能看到“失败”一词。请尝试我的代码。上面的代码将使更新在包括特殊字符(如:“&;”?”)的输入上失败,因为没有进行编码。我更新了代码,现在您可以将其放入。如果您的表单有ID(如
),请使用
$('form#some_form')。serialize()
您标记为正确的答案似乎无法解决您的问题。您是否尝试了我的代码?
$(document).ready(function(){
   $('button#pdetails').click(function(){
     var resumetitle = $('#resumetitle').val();
     var cvid = $('input[type="hidden"]').val();
     var name = $('#cvname').val();
     var dob = $('#datepicker').val();
     var gender = $('input[name="gender"]:checked').val();
     $.ajax({
       type: "POST",
       url: "classes/ajax.resumeupdate.php",
       data: "resumeid="+cvid+"&resumetitle="+resumetitle+"&name="+name+"&dob="+dob+"&gender="+gender,
       success: function(){
           //window.location = "resumeview.php?cvid="+cvid;
       },
     });
   });
});