无法从jQuery Post

时间:2017-10-11 02:30:33

标签: javascript jquery html rest post

我一直在寻找这个问题的答案,但我找到的答案都没有帮助解决这个问题:

通过jQuery的HTTP Post不会返回任何数据。

以下是javascript代码:

$.post(
    <ENDPOINT_URL>,
    <XYZ DATA SENT>, 
    function(data){
        //THIS IS THE PROBLEM HERE
    },
    "json")
    .fail(function(jqXHR, textStatus, errorThrown){
        alert(textStatus);
    });

这会调用我的端点API Url,返回代码200和JSON响应正文:

{message: "XYZ"}

所以这就是我迄今所做的:

  1. 由于异步行为,我创建了一个接收和处理数据输入的函数。什么都没发生。
  2. 添加.fail以处理失败。根据一篇文章,我的JSON返回的格式可能不正确并且放置.fail来处理失败可能会让我知道发生了什么......有没有办法获取实际的错误消息详情?
  3. 验证了我的JSON。格式不正确还是我没有意识到的事情?
  4. 用$ ajax替换整个代码。仍然,得到同样的错误。
  5. 我希望能够收到该回复并处理消息&#34; XYZ&#34;。

    感谢大家的帮助,非常感谢。

    我遵循的教程/文章:

    https://api.jquery.com/jquery.post/

    How do I return the response from an asynchronous call?

    why cant I return data from $.post (jquery)

4 个答案:

答案 0 :(得分:1)

全部,非常感谢您的所有反馈 - 问题现在已经解决了。 @Austin French,在审核了服务器端和客户端javascript的完整方法后,我意识到问题与标题有关。

我很抱歉没有进一步扩展我的问题并提供更多详细信息:我使用Amazon AWS API Gateway处理后端Lambda函数,客户端调用函数,函数执行作业并返回JSON:< / p>

{"message":"xyz"}

我没有在客户端使用jQuery $ .post收到此消息。问题归结为AWS API Gateway如何处理请求并返回响应。

我需要将以下标题包含在我的Lambda函数响应中:

"Access-Control-Allow-Origin" : "*"

以下是服务器端响应的完整代码:

//Response
let responseCode = 200;
var responseBody = {
    message: responseMessage
};
var response = {
    statusCode: responseCode,
    headers: {
        "Access-Control-Allow-Origin" : "*"
    },
    body: JSON.stringify(responseBody)
};

现在在客户端,我的原始函数(数据){...}接收响应并能够正确处理它,不会触发任何错误。客户端响应处理程序:

function(data){
    alert(JSON.stringify(data));
 }

再次感谢大家的帮助!

答案 1 :(得分:0)

请尝试以下操作:

$.post(
    ENDPOINT_URL,
    myData,
    function(data) {
        var response = jQuery.parseJSON(data);
        console.log(response);
    }
);

答案 2 :(得分:0)

这是我通常使用它的方式。它发送数据就好像以html格式发送并接收json响应。

var value1, value2;

$.ajax({
  type: "POST",
  url: url,
  data: {"property1" : value1, "property2" : value2},
  success: function(result, status, xhr){
     <here you can process the json you get as response in result}
  },
  error: function(xhr, status, theError){
     <here process if ajax fails>
  },
  dataType: "json"
});

答案 3 :(得分:0)

一些不符合评论的事情:

我更喜欢这种AJAX格式:

var myUrl = $(selector).val();
$.post( myUrl, { name: "John", time: "2pm" })
   .fail(function (data) { /* code for failure */ }),
   .done(function( data ) {
    alert( "Data Loaded: " + data );
});

要查看服务器返回的内容,最简单的方法是使用Chrome的调试器:

Chrome Debugger Console

转到网络选项卡,选择调用方法,然后在右侧子窗格中选择响应。您不仅应该看到响应代码,还要看到返回的完整内容。

另外几点说明:

一旦AJAX完成,.Done将调用该函数。

根据Jquery版本,您可能没有.done而是.success,反之亦然。