即使对API的请求成功,为什么还没有触发Ajax成功函数?

时间:2016-08-08 13:35:09

标签: javascript java jquery ajax rest

我不知道为什么我的成功函数没有被触发只有错误函数被执行,即使我向我的API发出POST请求时,一切都按计划发生。

这是我的js:

$("form").submit(function (env) {
    env.preventDefault();
    $("#submitbtn").prop('disabled', true);
    $("#form_result").text("");
    var request = JSON.stringify($("#newRequest-form").serializeObject());
    console.log(request);
    $.ajax({
        method: "POST",
        url: "/api/holidays",
        data: request,
        contentType: "application/json",
        dataType: "json",
        success: function () {
            $("#form_result").text("Submitted succesfully");
            $(this).prop('display', 'hidden');
        },
        error: function (error) {
            $("#form_result").text("Error: creating the request");
            $("#submitbtn").prop('disabled', false);
        }
    });
});

表格:

<div class="formcontainer">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-sm-6 col-xs-12">
                <form class="form-horizontal" id="newRequest-form">
                    <div class="form-group ">
                        <label class="control-label " for="reason">
                            Reason
                        </label>
                        <textarea class="form-control" cols="40" id="reason" name="reason" rows="10"
                                  required=""></textarea>
                    </div>
                    <div class="form-group ">
                        <label class="control-label " for="holidayType">
                            Holiday Type
                        </label>
                        <select class="select form-control" id="holidayType" name="holidayType">
                            <option value="Medical">
                                Medical
                            </option>
                            <option value="Rest holiday">
                                Rest holiday
                            </option>
                            <option value="Other">
                                Other
                            </option>
                        </select>
                    </div>
                    <div class="form-group ">
                        <label class="control-label " for="startDate">
                            Start Date
                        </label>
                        <input class="form-control" id="startDate" name="startDate" placeholder="DD/MM/YYYY"
                               type="text" required=""/>
                    </div>
                    <div class="form-group ">
                        <label class="control-label " for="endDate">
                            End Date
                        </label>
                        <input class="form-control" id="endDate" name="endDate" placeholder="DD/MM/YYYY" type="text"
                               required=""/>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-10 col-sm-offset-2">
                            <button class="btn btn-success btn-lg" id="submitbtn">
                                Submit Request
                            </button>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-10 col-sm-offset-2">
                            <div id="form_result"></div>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

API:

@RestController
public class AddHolidayRequestController {

    @Autowired
    private AddHolidayService addHolidayService;

    @Autowired
    private HolidayRepository holidayRepository;

    @ResponseBody
    @RequestMapping(value = "/api/holidays", method = RequestMethod.POST)
    public ResponseEntity addHolidayRequest(@RequestBody HolidayFormData holidayFormData) {
        HolidayRequest holidayRequest = new HolidayRequest();

        try {
            holidayRequest = addHolidayService.isValid(holidayFormData);
        } catch (UserNotFoundException e) {
            System.err.println(e.getMessage());
        }
        if (holidayRequest == null)
            return new ResponseEntity(HttpStatus.BAD_REQUEST);

        holidayRepository.save(holidayRequest);

        return new ResponseEntity(HttpStatus.CREATED);
    }
}

每当我向REST控制器发出POST请求时,我都会从错误函数中获得“创建请求时出错”消息,为什么会这样?

1 个答案:

答案 0 :(得分:1)

通过查看代码,我觉得下面的代码行导致了问题,

       $(this).prop('display', 'hidden');

在成功的内部,$(this)不会引用当前元素,你可以做的是将$(this)的引用保存在外面然后你可以调用如下所示的使用

.
.
var $this = $(this);
$.ajax({
        method: "POST",
        url: "/api/holidays",
        data: request,
        contentType: "application/json",
        dataType: "json",
        success: function () {
            $("#form_result").text("Submitted succesfully");
            $this.prop('display', 'hidden');
        },
        error: function (error) {
            $("#form_result").text("Error: creating the request");
            $("#submitbtn").prop('disabled', false);
        }
    });

如果仍然无法正常工作,请告诉我......