【问题标题】:AJAX, jQuery HTTP Post, no data being recievedAJAX,jQuery HTTP Post,没有接收到数据
【发布时间】:2016-02-08 21:15:02
【问题描述】:

我在这里查看了许多类似的问题,但我无法深入了解这个问题。

我已经构建了一个 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 -

到目前为止一切顺利......

我已经用以下代码构建了一个网页(我是 web 开发的新手),我用它来发布这个 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 数据。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    通过您的 curl sn-p 看起来您的端点正在等待 JSON 请求有效负载。 jQuery 没有设置 application/json 的 content-type 请求头,所以你必须实际告诉它这样做:

    $.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 问题。

    【讨论】:

    • 感谢您的信息,奇怪的是,当我发布时,我现在在我的 API 日志中看到一个 OPTIONS 方法:192.168.1.120 - - [08/Feb/2016 21:31:28] "OPTIONS /api /v1.0/stateHTTP/1.1" 200 -
    • 我也确实遇到了针对我的 API 的 GET 方法的 CORS 问题,并且我使用了一个 python 烧瓶 CORS 模块来解决这个问题(API 是使用 python 烧瓶构建的)。
    • 我做了一些谷歌搜索,OPTIONS 响应似乎是飞行前消息,在发送 POST 之前,看起来我可能需要构建 OPTIONS 请求支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多