无法使用Ajax调用Spring的Controller方法

时间:2015-02-18 10:32:34

标签: java ajax spring spring-mvc

我是Ajax的新手,我需要一些帮助。我需要使用Ajax调用控制器方法,并在JSP页面上将输出显示为响应。下面给出的是我尝试过的一段代码,但我无法使其正常工作。

服务器代码

@RequestMapping(value="/home.do",method=RequestMethod.POST,params="custdetails")
public  @ResponseBody ModelAndView getCustomderDetails(@RequestParam("str")   String custId,@ModelAttribute("customerdropdown") CustomerNameDropDown cdropdown)
{
    ModelAndView mav = new ModelAndView("CustomerDetails");
    List listCustomerDetails=new ArrayList();
    List<Object[]> CustomerDetailsList = new ArrayList<Object[]>(); 

    CustomerDetailsList=customerDetailsService.getCustomerDetails(custId);

    mav.addObject("custregistration", cdropdown);
    mav.addObject("customerdetailslist", CustomerDetailsList);
    return mav;
}

客户代码

function getCustomerDetails(str) {
    var xmlhttp;

    if (str=="")
    {
        document.getElementById("txtHint").innerHTML="";
        return;
    }

    if (window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();        
    }
    else
    {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200)
            {
                document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
            }
            else
            {
                document.getElementById("txtHint").innerHTML="Please Enter All Fields..";
            }
        }
    };

    xmlhttp.open("POST","home.do?custdetails"+"&age="+str,true);
    xmlhttp.send(); 
}

1 个答案:

答案 0 :(得分:0)

您应该将控制器方法中的@RequestParam("str")更改为@RequestParam("age"),请求参数的值是请求参数的名称,在您的情况下 age { {1}}

您可以将请求中的参数名称更改为xmlhttp.open("POST","home.do?custdetails"+"&age="+str,true);但我认为前者更合适,因为您很可能在映射中混淆了参数名称和参数值

如果您的目的是使RequestParam成为可选项,那么您应该明确地定义它,因为xmlhttp.open("POST","home.do?custdetails"+"&str="+str,true);是必需的