选择onblur触发ajax但不更新数据库

时间:2015-09-02 09:44:16

标签: javascript php ajax

我有一个选择下拉列表,当它被更改时,我想更新数据库中的值。当我弹出gif并且控制台中没有错误但数据库没有更新时,Ajax正在触发。所有其他字段(例如下面示例中的startdate)工作正常,因此我认为Ajax调用是正确的。我已经尝试使用onBlur和onChange作为select的事件处理程序。

<td <form><select onblur="saveToDatabase(this,'workingpatternid', 'employmenthistory', 'employmenthistoryid','<?php echo $employmenthistory[$k3]["employmenthistoryid"]; ?>')"><option value="<?php echo $employmenthistory[$k3]["workingpattternid"]; ?>"><?php echo $employmenthistory[$k3]["text"]; ?></option><?php
          if(isset($workingpatterns) && !empty($workingpatterns)){
          foreach($workingpatterns as $k4=>$v4) {
          ?> <option value="<?php echo $workingpatterns[$k4]["workingpatternid"]; ?>"><?php echo $workingpatterns[$k4]["text"]; ?></option><?php }}?></select></form></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'startdate', 'employmenthistory', 'employmenthistoryid','<?php echo $employmenthistory[$k3]["employmenthistoryid"]; ?>')" onClick="showEdit(this);"><?php echo $employmenthistory[$k3]["startdate"]; ?></td>

Savetodatabase功能:

<script type="text/javascript" name = "editable fields">
        function showEdit(editableObj) {
            $(editableObj).css("background","#FFF");
        } 

        function saveToDatabase(editableObj,column,table,primary,id) {
            $(editableObj).css("background","#FFF url(loaderIcon.gif) no-repeat right");
            $.ajax({
                url: "saveedit.php",
                type: "POST",
                data:'column='+column+'&editval='+editableObj.innerHTML+'&table='+table+'&primary='+primary+'&id='+id,
                success: function(data){
                    $(editableObj).css("background","#FDFDFD");
                }        
            });
        }
    </script>

saveedit.php

<?php
require_once("connect_db.php");
$table=$_POST['table'];
$column=$_POST['column'];
$value=$_POST['editval'];
$primary=$_POST['primary'];
$id=$_POST['id'];
$sql = "UPDATE `$table` SET `$column` = '$value' WHERE `$primary`='$id'";
$result = mysqli_query ($dbc, $sql) or die(mysqli_error ($dbc));
?> 

1 个答案:

答案 0 :(得分:1)

调试正在发送的请求:

客户端

如果您在呼叫页面上按F12,请转到网络控制台(我假设您使用的是较新的浏览器,如Chrome 40+或IE 9+)并确保正在保存缓存(即不刷新页面刷新)。

更新页面,清除列表,然后再次触发代码。请注意请求是否按预期发送(单击代表对saveedit.php的调用然后请求的行)

服务器端

您可以添加对error_log(var_export($_POST))的来电,看看您是否收到了预期。结果将在您的webservers error.log中,因此如果在部署后意外遗留,则不会向用户公开数据。

还可以通过在服务器上拖动access.log来验证是否正在调用该页面。

通过javascript获取预期值:

问题是第一个电话是在选择中;代码可以是editableObj.options[editableObj.selectedIndex].value,但第二个是div元素。你应该重新考虑你的页面设计,或者做两个不同的功能(不推荐)