mvc从前台发送ajax请求得到的数据显示未定义(undefined),哪位帮忙看看

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mvc从前台发送ajax请求得到的数据显示未定义(undefined),哪位帮忙看看相关的知识,希望对你有一定的参考价值。

前台代码是这样的:
var categoryId = $(this).attr("title");
var datas = $.ajax(type: "POST",sysnc: true,url: "GetDocumentByCategoryId",data: "CategoryId=" + categoryId,dataType: "json").responseText;alert(datas);
后台代码:
public JsonResult GetDocumentByCategoryId(int categoryId) List<Document> documents = DocumentService.GetDocumentByCategory(categoryId); return Json(documents); 调试显示已经成功从数据库中取到数据了!但是在前台调用时显示未定义,哪位帮我看看!!!

参考技术A 真的 参考技术B 我这里也是相同的问题啊

Spring MVC 预授权控制器操作未收到 POST 请求

【中文标题】Spring MVC 预授权控制器操作未收到 POST 请求【英文标题】:Spring MVC preauthorize Controller action not getting POST request 【发布时间】:2015-09-10 09:34:03 【问题描述】:

Spring MVC 和 Ajax 方面的菜鸟。我正在尝试使用 jQuery Ajax 帖子将一些数据从视图发送到控制器,但它要么给我 405 handleHttpRequestMethodNotSupported 或 403 :-( 有人能指出我正确的方向吗?

这是我的控制器操作 preAuthorize

@PreAuthorize( "hasAuthority('Admin')" )
@RequestMapping( value = "/configSave", method = RequestMethod.POST )
public String saveConfiguration( @RequestParam String test )

    return "configSave";

以下是发送发布请求的页面中的代码。

...
<input type="button" value="Save" id="save" onclick="saveConfig()"/>
...
function saveConfig()
    
        var testPost =  test: "testing";

        $.ajax(
                
                    url: "hello/configSave",
                    data: "'test':'testing'",
                    contentType: "application/x-www-form-urlencoded",
                    type: "post",
                    beforeSend: function (xhr) 
                        xhr.setRequestHeader("Accept", "application/json");
                        xhr.setRequestHeader("Content-Type", "application/json");
                    ,
                    success: function () 
                        alert("foo");
                    ,
                    error: function() 
                        alert("bar");
                    
                
        );
    

它所做的只是向我抛出一个带有bar 警报的 403(暂时,否则为 405)错误。

编辑: 令人惊讶的是,当我不执行 ajax 发布(我需要这样做)时,它会在控制器中调用 configSave 操作。只是真的对这种行为感到困惑!

【问题讨论】:

headers="Accept=application/json" 尝试在你的 requestMapping 中添加这个 @DejanBiljecki - 不,也不使用。 【参考方案1】:

设法在 Spring 文档 this 和 this 中找到了几个部分,其中说我在使用 Spring Security 时需要使用 CSRF 令牌来发送发布请求。经过大量测试和跟踪后,我发现以下代码对我有用。我希望它也对其他人有所帮助。欢迎任何更好的建议。

...<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>...

...<sec:csrfMetaTags />...//Within <head>

...var csrfToken = $("meta[name='_csrf']").attr("content");...//somewhere in page load

function saveConfig()
    
        var test =  name: "testing" ;

        $.ajax(
                
                    url: "hello/configSave",
                    data: JSON.stringify( test ),
                    dataType: "text",
                    contentType: "application/json",
                    type: "post",
                    headers: 
                        'Accept': 'application/json',
                        'Content-Type': 'application/json',
                        'X-CSRF-TOKEN': csrfToken //adding this made it WORK!
                    ,
                    success: function (msg) 
                        alert("Yippie! Saved");
                    ,
                    error: function() 
                        alert("Save failed, please try again!");
                    
                
        );
    

【讨论】:

【参考方案2】:

添加headers = "Accept=application/json"

contentType: "application/x-www-form-urlencoded", 替换为contentType : "application/json",

这里有很多活动部件。你为什么不把它分解并在更小的部分进行验证。在Spring authentication 之外创建类似的代码。一旦你有 Ajax 工作,那么你可以添加 Spring authentication 回来。 403405 无关。因为,这只是标题不匹配,其他是安全问题。

【讨论】:

不。也没有运气。 403 (Forbidden) 这次:-( @KunalPatel 删除 -- @PreAuthorize( "hasAuthority('Admin')" ) 并尝试。禁止是一个更好的错误:) 你在使用spring security吗? @java_dude,如果我删除它,我仍然会得到相同的 403。Dejan,是的,我正在使用 Spring Security。 我用一个示例项目对其进行了测试,在没有弹簧安全性的情况下它可以正常工作。它仍然在向我扔 403!!

以上是关于mvc从前台发送ajax请求得到的数据显示未定义(undefined),哪位帮忙看看的主要内容,如果未能解决你的问题,请参考以下文章

ajax请求得到后台数据,前台页面不用拼接 “字符串和HTML表格标签”,使用方便模板然后clone,显示表格

react中向后台服务器发送一请求 后台接口返回的是byte[]类型的图片 我现在如何在前台界面中显示它?

Spring MVC 预授权控制器操作未收到 POST 请求

MVC中前台如何向后台传递数据------$.get(),$post(),$ajax(),$.getJSON()总结

使用webformwebsevice来进行ajax请求操作

Ajax 函数未显示 JSON 日期列表 (Mvc5)