2017-10-11 58 views
0

返回任何数据我一直在寻找在这一个答案,但没有一个答案,我发现帮助解决这个问题:无法从jQuery的帖子

HTTP邮政通过jQuery没有返回任何数据。

下面是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返回的格式可能不正确,并且放置该失败处理失败可能会让我知道发生了什么......有没有办法获取实际的错误消息详细信息?
  3. 验证我的JSON。格式不正确还是我没有意识到?
  4. 改为用$ ajax代替整个代码。仍然,得到相同的错误。

我希望能够接收到该响应并处理消息“XYZ”。

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

教程/文章我已经按照:

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

How do I return the response from an asynchronous call?

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

+0

'{message:“XYZ”}'无效JSON - 这正是返回的内容吗?属性名称必须被引用,所以它应该是'{“message”:“XYZ”}'。 – nnnnnn

+0

你有没有检查过如何在''上处理数据?有没有有效的回报数据或任何错误? –

回答

1

所有,非常感谢您的所有反馈 - 问题现在解决。 @Austin法语,在浏览服务器端和客户端JavaScript的完整方法后,我意识到这个问题与头文件有关。

我很抱歉没有进一步扩展我的问题并提供更多详细信息:我正在使用Amazon AWS API网关处理后端Lambda函数,客户端调用该函数,该函数完成该工作并返回JSON:

{"message":"xyz"} 

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

我需要包括以下标题为我的拉姆达的功能反应的一部分:

"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)); 
} 

再次感谢大家的帮助!

+0

有趣的。请更新您的标签以包含AWS或亚马逊网络服务,以便其他人可以找到类似的问题。并更新任何可能帮助或证明有用的答案,甚至只是为了让你朝着正确的方向前进 –

0

尝试以下操作:

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

不起作用:(同样的问题仍然没有得到答复,但在Chrome开发人员模式下,我确实看到响应以JSON形式进入。 – nukalov

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" 
}); 
+0

不起作用。这几乎与我之前尝试的ajax代码几乎相同,但仍然不能得到任何东西,它确实调用了错误代码,所以显然有一些错误发生了,但是当我做了一个alert(theError)时,我什么也没有得到。 – nukalov

+0

如果错误函数被执行,那么请求失败。检查网址,并明确指出是否与你指向的网址有关联,同时检查开发者控制台是否有任何错误报告 – Juan

+0

如上所述,请求没有失败,我实际上得到了回应我希望在Chrome的开发者控制台(JSON响应和200个状态代码),并没有错误报告。是的,错误功能正在触发,这指出了响应的问题。完整的前端和后端日志。 – nukalov

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

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

一些附加说明:

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

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

+0

谢谢。我确实已经在Chrome中使用过,状态码是200,响应是{“message”:“xyz”},它是一个格式正确的JSON字符串。 – nukalov

+0

另外,我之前也使用过.done,但仍然没有任何结果。 – nukalov

+0

@nukalov那么看起来你得到了一个成功的POST响应和一个有效的JSON,所以定义.done或.success事件来处理它。 –