实际上成功后,AJAX发布请求报告失败

时间:2017-09-16 08:43:04

标签: javascript c# jquery ajax post

奇怪的情况。我正在使用AJAX将一些数据发布到服务,并且成功 - 这意味着我可以真正看到存储在数据库中的新数据。但是,我的代码没有进入done()部分,但由于某种原因总是在fail()部分结束。我提供相关代码。

$(document).ready(function(){

    // on-click listener
    $("#btn-submit").click(function(e) {
        // obtain data from the form
        var employee = {
            FirstName: $("#input-first-name").val(),
            LastName: $("#input-last-name").val(),
            BirthPlace: $("#input-birth-place").val(),
            CurrentPlace: $("#input-current-place").val(),
            Gender: $("#input-gender").val(),
            Department: $("#input-department").val(),
            OIB: $("#input-oib").val()
        };

        // AJAX call on button clicked
        $.ajax({
            type: "POST",
            dataType: "json",
            url: "http://127.0.0.1:8080/api/employee/",
            data: employee
        }).done(function(){
            alert("Successfully created new entry!");
        }).fail(function(xhr) {
            //alert("Fail!");
            console.log(xhr);
        });
    });
});

我正在尝试记录错误消息,但它只是这样:

{readyState: 0, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}

服务器的响应生成如下。

[HttpPost]
[Route("")]
public HttpResponseMessage Post([FromBody]EmployeeDto employee)
{
    long id = persistence.SaveEmployee(employee);

    // create http response
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
    response.Headers.Location = new Uri(Request.RequestUri, String.Format("/api/employee/{0}", id));

    return response;
}

使用201 Created状态代码生成以下响应:

    Date: Sat, 16 Sep 2017 11:11:51 GMT
Server: Mono.WebServer.XSP/4.4.0.0 MacOSX
Location: http://127.0.0.1:8080/api/employee/40
Access-Control-Allow-Origin: *
X-AspNet-Version: 4.0.30319
Content-Length: 153
Expires: -1
Pragma: no-cache
Cache-Control: no-cache
Content-Type: application/json; charset=utf-8
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive

我真的不知道这意味着什么,也不知道为什么代码在实际设法发布新条目时会进入失败部分。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我不确定这是你的情况,因为你从未提过从服务器返回的数据是什么 根据{{​​3}},从jquery 1.9开始,空响应也被拒绝。

  

以严格的方式解析JSON数据;任何格式错误的JSON都是   拒绝并抛出一个解析错误。截至jQuery 1.9,一个空的   回应也被拒绝;服务器应返回null响应   或{}代替。

答案 1 :(得分:0)

function(xhr)更改为

function(XMLHttpRequest, textStatus, errorThrown)

和您的控制台日志

console.log(XMLHttpRequest, textStatus, errorThrown);

因此,您现在可以监视请求中是否存在错误,因为我们现在还没有对您的Ajax请求进行任何操作。