AJAX不更新类

时间:2015-09-19 15:05:01

标签: php jquery html ajax

我有一个简单的HTML表,其中一列显示Yes / No选项 - 当用户将Yes更改为No或反之时,它通过AJAX调用PHP脚本来更新数据库中的记录。这一切都运行良好,但我现在想要在父脚本中添加一个类,以便在PHP脚本成功与否时单击该单选按钮。

这是表格的样子:

<table>
<thead>
<tr>
    <th scope="col">Description</th>
    <th scope="col">Type</th>
    <th scope="col">Completed</th>
</tr>
</thead>
<tbody>
<tr>
    <td>Welcome Email</td>
    <td>Email</td>
    <td class="">
        <div class="radio" id="radio1">
            <label><input checked id="1" name="completed1" type="radio" value="Yes">Yes</label>
            <label><input id="1" name="completed1" type="radio" value="No">No</label>
        </div>
    </td>
</tr>
<tr>
    <td>Follow Up Phone Call</td>
    <td>Phone call</td>
    <td class="">
        <div class="radio" id="radio2">
            <label><input id="2" name="completed2" type="radio" value="Yes">Yes</label>
            <label><input checked id="2" name="completed2" type="radio" value="No">No</label>
        </div>
    </td>
</tr>
</tbody>

这是我的脚本 - 它正在调用PHP页面成功更新数据库,但它没有将类添加到单选按钮div:

$(document).ready(function() {
    $("input[type='radio']").change(function(){
        var recid = $(this).closest('div').attr('id');
        var completed = $(this).val();
        $.post('updateTask.php', { type: 'updateTask', recid: recid, completed: completed }, function(data) {
        data = JSON.parse(data);
            if (data.error) {
                $(this).closest('div').attr('id').addClass("has-error");
                $("#ajaxAlert").addClass("alert alert-danger").html(data.text);
                $("#ajaxAlert").show();
                return; // stop executing this function any further
            } else { 
                $(this).closest('div').attr('id').addClass("has-success");
                $(this).closest('div').attr('id').removeClass("has-error");
                // if you want to show a success alert enable the following
                // $("#ajaxAlert").addClass("alert alert-success").html(data.text);
                $("#ajaxAlert").hide();
            }

        }).fail(function (xhr) {
            // no data available in this context
            $(this).closest('div').addClass("has-error");
            $("#ajaxAlert").addClass("alert alert-danger");
            //display AJAX error details
            $("#ajaxAlert").html(xhr.responseText);
            $("#ajaxAlert").show();
        });
     }); 
});

我不确定如何定位DIV来添加类 - 我通常会做类似的事情:

$("#storeManagerRow").addClass("success");

但是在这种情况下,我在页面上最多有20个单选按钮单元格,因此在单击单击以更新类的单选按钮DIV的父级语法时遇到问题。

2 个答案:

答案 0 :(得分:0)

该声明因其范围而无效:

$(this).closest('div').addClass("has-error");

解决方法:

$(document).ready(function() {
  $("input[type='radio']").change(function(){
    var recid = $(this).closest('div').attr('id');
    var completed = $(this).val();
    // Create a reference to $(this) here:
    $this = $(this);
    $.post('updateTask.php', { type: 'updateTask', recid: recid, completed: completed }, function(data) {
      data = JSON.parse(data);
      if (data.error) {
        // $(this) is wrong here. It refers to the AJAX Object.
        $this.closest('div').attr('id').addClass("has-error");
        $("#ajaxAlert").addClass("alert alert-danger").html(data.text);
        $("#ajaxAlert").show();
        return; // stop executing this function any further
      } else { 
        $this.closest('div').attr('id').addClass("has-success");
        $this.closest('div').attr('id').removeClass("has-error");
        // if you want to show a success alert enable the following
        // $("#ajaxAlert").addClass("alert alert-success").html(data.text);
        $("#ajaxAlert").hide();
      }

    }).fail(function (xhr) {
      // no data available in this context
      // $(this) is wrong here. It refers to the AJAX Object.
      $this.closest('div').addClass("has-error");
      $("#ajaxAlert").addClass("alert alert-danger");
      //display AJAX error details
      $("#ajaxAlert").html(xhr.responseText);
      $("#ajaxAlert").show();
    });
  }); 
});

答案 1 :(得分:0)

将元素保存在变量中,因为post函数中的$(this)与单选按钮不同。

$(document).ready(function() {
    $("input[type='radio']").change(function(){
        var recid = $(this).closest('div').attr('id');
        var completed = $(this).val();
        var el = $(this);
        $.post('updateTask.php', { type: 'updateTask', recid: recid, completed: completed }, function(data) {
        data = JSON.parse(data);
            if (data.error) {
                el.parent().addClass("has-error");
                el.parent().removeClass("has-success");
                $("#ajaxAlert").addClass("alert alert-danger").html(data.text);
                $("#ajaxAlert").show();
                return; // stop executing this function any further
            } else { 
                el.parent().addClass("has-success");
                el.parent().removeClass("has-error");
                // if you want to show a success alert enable the following
                // $("#ajaxAlert").addClass("alert alert-success").html(data.text);
                $("#ajaxAlert").hide();
            }

        }).fail(function (xhr) {
            // no data available in this context
            el.parent().addClass("has-error");
            $("#ajaxAlert").addClass("alert alert-danger");
            //display AJAX error details
            $("#ajaxAlert").html(xhr.responseText);
            $("#ajaxAlert").show();
        });
     }); 
});

我认为你必须在发生错误时删除你的成功课程?!