【问题标题】:jquery ajax call returns error on successful call to a servletjquery ajax 调用在成功调用 servlet 时返回错误
【发布时间】:2011-11-28 11:07:12
【问题描述】:

我有一个 servlet,可以将用户添加到服务器端的文件中。
我使用 jqueries ajax 调用来调用它。
我可以在服务器上看到该方法被正确调用并添加了我的用户,但是在 jquery 调用中调用了错误回调。所有状态文本都说是错误。
使用萤火虫的响应似乎是空的。为什么我无法获得成功的 jquery 回调?

//Servlet Code
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String action = request.getParameter("action");
    String responseStr = "";
    if(action.equals("addUser")) 
    {  
      responseStr = addUser(request);       
    }
    System.out.println("Reponse:" + responseStr);  
    response.setContentType("application/json"); 
    response.setCharacterEncoding("utf-8"); 
    response.getWriter().println(responseStr);
}

private String addUser(HttpServletRequest request) throws IOException
{
    Storage s;

    s = Storage.load();
    String name = request.getParameter("name");
    String imageUrl = request.getParameter("imageUrl");
    User u = new User();
    u.setName(name);
    u.setImageUrl(imageUrl);
    s.addUser(u);
    s.save();
    return "success";
}

.

//javascript code
function addUser() {
    var name = $('#name').val();
    var imageUrl = $('#imageUrl').val();
    var url = "http://ws06525:8080/QCHounds/QCHoundServlet?action=addUser&name=${name}&imageUrl=${imageUrl}";
    url = url.replace("${name}", name);
    url = url.replace("${imageUrl}", imageUrl);
    $('#result').html(url);
    $.ajax({
      url: url,
      success: function( data ) {
         $('#result').html(data);
      },
      error: function(jqXHR, textStatus, errorThrown) 
      {
           alert("error: " + textStatus); 
           alert("error: " + errorThrown);
      }
    });


}

【问题讨论】:

  • 如果FireBug显示响应为空,如何响应成功?
  • 我的意思是服务器端功能成功执行并添加了我的用户,但是响应确实是空的,我不明白为什么??

标签: java javascript jquery servlets


【解决方案1】:

啊啊啊!感觉自己像个白痴。这是一个跨站点脚本问题。 我正在测试从磁盘上的 html 文件对服务器的调用,所以我的浏览器地址是

file://projects/myproject/content/Users.html

代替:

http://myboxname:8080/appname/Users.html

实际代码没问题...

【讨论】:

    【解决方案2】:

    一方面,字符串"success" 不是有效的json。如果您的 ajax 查询需要 json,那将会失败。

    如果您返回"{ \"success\": true }" 怎么办?

    编辑

    从您的 ajax 调用看来,响应不应该是 json,为什么您的返回内容类型是 json?

    如果firebug确实没有显示响应,那么你的问题一定出在编写响应的java代码中。

    【讨论】:

    • 试过了。没有区别
    【解决方案3】:

    使用它来了解问题所在,我认为它会更好地获得解决方案

    error: function(e){
        alert(JSON.stringify(e))
    }
    

    【讨论】:

    • 仍然得到错误。这里是:{"readyState":0,"responseText":"","status":0,"statusText":"error"}
    • 我猜它与您的 ajax 调用的 contentType 或 dataType 有关。你能分享你的ajax调用代码吗?
    • 您的意思是实际的 ajax 调用?它在问题中,只需在代码中向下滚动一点。
    • 这个答案并没有帮助我解决问题,但是非常好的建议。我不知道你能做到这一点。 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2015-10-16
    • 2016-03-11
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多