我在这里看过很多类似的问题,但我无法深究这个问题。
我已经构建了一个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数据。
谢谢!
答案 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问题。