Play1.2.7 中对控制器的 Ajax/Json 请求无法指定内容类型

Posted

技术标签:

【中文标题】Play1.2.7 中对控制器的 Ajax/Json 请求无法指定内容类型【英文标题】:Ajax/Json request to Controller in Play1.2.7 not working specifying content type 【发布时间】:2014-07-14 10:28:33 【问题描述】:

我有这个js代码

function sendJSon()
    var user = "user_name" : $("#my_input_field").val();

    $.ajax(
        url: 'http://localhost:9000/myAction',
        type: 'POST',
        data: JSON.stringify(user),
        success: function(result) 
            $("#my_res_div").html(result);
        ,
        error: function()
            alert("error");
        
    );

当传递给应用程序时效果很好,然后按预期继续成功。 但是经过多次尝试后我达到了这个目标,因为在开始时(浏览此站点)我找到了建议同时为 JSON 请求指定内容类型(应用程序/json 或文本/javascript)和数据类型(json)的答案。

如果我指定内容或数据类型,我想知道为什么会得到 XMLHttpRequest cannot load http://localhost:9000/myAction. Invalid HTTP status code 404。 这是路由文件中的路由行

POST    /myAction                           Application.jsonRequest

【问题讨论】:

【参考方案1】:

您引用的错误基本上意味着对 POST 请求的响应是 404 状态,这不是 POST 请求的预期值(您正在发送内容,服务器说它可以是不合逻辑的)找不到该内容)。

通常不需要为$.ajax 指定dataType 字段,因为它会尝试自行解决。但是,这个字段应该不会造成问题,因为它是关于解析响应数据的,它只发生在收到响应之后,并且错误代码首先表明响应错误(意味着它永远不会解析)。

$.ajaxcontentType 字段对于请求更重要。它是一个由两部分组成的字符串,指定要发送的内容的类型和用于对内容进行编码的字符集。因此,将其设置为您命名的任何一个值的问题在于缺少字符编码。另一个问题是您在指定数据类型的同时没有提供该格式的数据。您正在明确地对内容进行字符串化,这意味着它不会是 JSON 数据。

【讨论】:

谢谢您,先生。你教了我一些有趣的东西,并指出了我的一个大错误/误解。

以上是关于Play1.2.7 中对控制器的 Ajax/Json 请求无法指定内容类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xls 中下载由 play 1.2.7 后端在 java 上生成的 html 表的内容

在控制器中对模拟对象使用期望的最佳实践是啥

在导航控制器中对标题文本进行动画更改

在rails中对控制器操作进行ajax调用

从局部视图中对控制器的 AJAX 调用

在 Laravel 中对控制器进行单元测试而不测试路由的最佳方法是啥