Ajax和Spring MVC:responseText不起作用?

时间:2014-03-19 18:52:39

标签: jquery spring spring-mvc

我必须使用Ajax从Controller MVC中的方法获取String。
我编写了这段代码,但当我使用方法responseText点击按钮时,方法removePrenot()没有读取我返回的字符串。 没有JQuery,我怎么做呢?也许我必须使用GET而不是POST?
谢谢。

控制器方法

@RequestMapping(value="/delete", method=RequestMethod.POST)  
public void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
  String str="Questo viene dal controller.";
  response.setContentType("text/plain");
  response.setCharacterEncoding("UTF-8"); 
  response.getWriter().write(str); 
 }

Javascript(Ajax)

function setXMLHttpRequest() {
    var xhr=null;
    if (window.XMLHttpRequest) {
        xhr=new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        xhr=new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xhr;
}

var xhrObj=setXMLHttpRequest();

function removePrenot() {
    var url="<%=request.getContextPath()%>/delete";
    xhrObj.open("POST",url,true);
    xhrObj.onreadystatechange=updatePage;
    xhrObj.send(null);
}

function updatePage() {
    if(xhrObj.readyState===4) {
        alert("Return - "+xhrObj.responseText);
        var risp=xhrObj.responseText();
        document.getElementById("risposta").innerHTML=risp;
    }
}

修改

我尝试使用jQuery,使用这些代码行但它仍然无法正常工作。

function doAjaxPost() {
    $.ajax({type:"Post", url:"<%=request.getContextPath()%>/delete",    
    success:function(response) {  
      alert(response);   
    },  
    error:function(e) {  
      alert('Error: ' + e);   
    }  
   });

1 个答案:

答案 0 :(得分:0)

您在Spring MVC中尝试做的事情可以使用以下代码完成

@RequestMapping(value="/delete", method= RequestMethod.POST)
    @ResponseBody
    public String delete()  {
        return "Questo viene dal controller.";
    }

你也可能最好使用jQuery为你的客户端ajax请求,因为它内部处理所有的crossbrowser东西

<强>更新

正如我所说,Spring MVC Controller中不需要HttpRequest和HttpResponse。事实证明,页面存在一些问题。首先,jQuery版本之间存在不匹配(版本1.11.0存在但正在请求版本1.10.1)。其次,jQuery脚本标记需要在使用它之前的任何其他javascript之前出现。 第三个是Spring MVC无法正确提供的静态资源。您需要将move,css,js和images移动到根web文件夹下名为static的文件夹,然后将以下配置添加到dispatcher-servlet.xml

<mvc:resources mapping="/static/**" location="/static/" />

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

因此,所有页面都需要使用static / ...

来请求资源

例如static/js/jquery-1.11.0.js