AJAX,jQuery HTTP Post,没有收到任何数据

时间:2016-02-08 21:15:02

标签: javascript jquery ajax curl asp.net-web-api

我在这里看过很多类似的问题,但我无法深究这个问题。

我已经构建了一个Web API,如果我使用curl发布它,如下所示:

curl -i -H "Content-Type: application/json" -X POST -d '{"password":"abcd"}' http://<ip>:5000/api/v1.0/state

我的API收到消息和记录:

<Request 'http://<ip>:5000/api/v1.0/state' [POST]>
{u'password': u'abcd'}
192.168.1.100 - - [08/Feb/2016 21:04:32] "POST /api/v1.0/stateHTTP/1.1" 200 -

到目前为止一直很好......

我已经使用以下代码构建了一个网页(我是网络开发人员的新手),我用它来发布此API:

function myFunction() {

$.ajax({
    url: "http://" + document.domain + ":5000/api/v1.0/state",
    method: "POST",
    dataType:"json",
    data: {"password" : "John"},
    success: function(data){
        alert(data);
    }
});

}

调用此功能时,我的API会清楚地收到帖子,但没有任何数据:

<Request 'http://<ip>:5000/api/v1.0/state' [POST]>
None
192.168.1.120 - - [08/Feb/2016 21:09:53] "POST /api/v1.0/state HTTP/1.1" 200 -

我尝试过使用$ .post方法:

$.post(
"http://" + document.domain + ":5000/api/v1.0/state",
JSON.stringify({"password" : "password" }) ,
function(data) {
    alert("Response: " + data);
 }
);

我得到了相同的结果。

编辑:尝试使用以下代码,如以下答案所示:

$.ajax({
   url: "http://" + document.domain + ":5000/api/v1.0/state",
   method: "POST",
   dataType:"json",
   contentType:'application/json',
   data: JSON.stringify({"password" : "John"}),
   success: function(data){
       alert(data);
   }

});

我收到了OPTIONS API响应:

192.168.1.120 - - [08/Feb/2016 21:31:28] "OPTIONS /api/v1.0/state HTTP/1.1" 200 -

有什么想法?我能够访问服务器,但无法获取任何JSON数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

通过您的curl片段,您的端点看起来像是期望JSON请求有效负载。 jQuery没有设置application/json的内容类型请求标头,所以你必须实际告诉它这样做:

$.ajax({
    url: "http://" + document.domain + ":5000/api/v1.0/state",
    method: "POST",
    dataType:"json",
    contentType:'application/json',
    data: JSON.stringify({"password" : "John"}),
    success: function(data){
        alert(data);
    }
});

另请注意,如果这是在其他域上使用,而不是"http://" + document.domain + ":5000,则可能最终遇到CORS问题。