在向localhost发送请求时,jQuery xhr.status返回0

时间:2016-01-28 00:49:35

标签: javascript java jquery json rest

更新 - 2016-01-30

正如我在评论中所建议的那样:

  1. 已安装XAMPP
  2. 将我的页面放在Apache上并运行服务器
  3. 确保页面和脚本正在执行(简单警报测试)
  4. 将xhrFields:withCredentials设置为false,根据唯一答案中的建议发出CORS请求并教授here
  5. 我仍然无法传递请求。这是控制台日志:

    var options = {
      fields: {sessionId: 1},
      sort: {date_inserted: -1}
    };
    
    var sessionId = sessionDB.findOne({}, options);
    

    如果有任何帮助,请查看“用户端”的内容: enter image description here

    ------------------初始票据--------------------------- -

    我有一个在本地运行的java rest应用程序,到目前为止接受一个get方法并返回一个json字符串: Successful get by id call

    另一种方法是POST,它应该转换,验证并保存发送表单中的信息并返回200个答案。如果在转换,验证或持久性过程中出现任何问题 - 抛出异常(例如BadRequest或500)。

    这是其余方法(我省略了简洁验证,构建方法以及转换器和转换器提供程序类):

    XMLHttpRequest cannot load http://localhost:8080/RimmaNew/rest/appointments. 
    No 'Access-Control-Allow-Origin' header is present on the requested resource. 
    Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 400
    

    客户端不在应用程序中(我认为这可能会有用) - 这是一个简单的HTML文件,在我的计算机上有这个jQuery脚本:

    @POST
    @Produces("application/json")
    @Consumes("application/x-www-form-urlencoded")
    public Response bookAppointment(@FormParam("date") Date appDate,
            @FormParam("time") Time appTime, @FormParam("type") String appType,
            @FormParam("clientName") String clientName, @FormParam("email") String clientEmail,
            @DefaultValue("") @FormParam("message") String clientMsg) {
        //externalize the validation of all fields to concentrate on "positive"
        //scenario only
        validator(appDate, appTime, appType, clientName, clientEmail);
        Appointment appointment = build(appDate, appTime, appType,clientName, 
                    clientEmail, clientMsg);
        try {
            repository.add(appointment);
            return Response.ok(appointment).build();
        } catch (Exception e) {
            throw new InternalServerErrorException("Something happened in the application "
                    + "and this apointment could not get saved. Please contact us "
                    + "to inform us of this issue.");
        }
    }
    

    我想提交一个表单,以便使用@FormParam带注释的属性访问其params。在我发送的每个请求中,我都没有收到任何抛出的错误,状态总是为0.你看到我在哪里犯错或者我错过了什么?

    enter image description here

1 个答案:

答案 0 :(得分:0)

状态代码为0表示请求未发生。为了获得状态代码,必须发生有效的http交互,如果没有,则没有状态代码。

发生这种情况的主要原因是:

  1. 无法解析DNS
  2. 无法建立与主机/端口的连接
  3. CORS问题,HTML不是由与服务器相同的主机/端口提供服务。在这种情况下,您需要编写一个CORS策略以允许特定域 向服务器发出ajax请求。
  4. HTML是本地文件,这是CORS问题的一个特例,其中某些浏览器不允许没有主机的连接。
  5. 所有这些都应该在javascript控制台上显示错误(最奇怪的是将自己显示为失败的OPTIONS请求的CORS)