JQuery Ajax请求意外地表现

时间:2014-04-12 16:34:19

标签: java jquery ajax json tomcat

我正在使用Jquerys Ajax方法与我的Web服务进行通信。代码似乎没问题,但我只是使用HTTPFox firefox插件监控HTTP流量,我注意到了意外的结果。首先,我将ContentType设置为application/json,我的网络服务也生成JSON数据,但HTTPFox将我的HTTP请求的内容类型指定为application/vnd.sun.wadl+xml (NS_ERROR_DOM_BAD_URI)

我的Ajax请求中设置的请求方法是GET,但HTTPFox将我的Request方法指示为OPTIONS。当请求成功并返回数据时,不会调用我的Ajax请求的onSuccess方法。而是调用onError方法。 HTTP Fox能够从我的Web服务捕获数据作为响应。查看HTTP Fox的图片。

最后,我浏览器中其他进程的所有其他请求似乎都可以,但我的HTTP请求被HTTP Fox标记为“RED”。来自其他页面和进程的请求似乎没问题。(绿色或白色)。

我在我的一个请求中突出显示了HTTPFox的屏幕截图。标记的也来自我的申请。

图像: enter image description here

我还粘贴了用于制作HTTP请求的Ajax代码。

window.onload = function() {

var seq_no = getParameterByName("seq_no");
var mileage = getParameterByName("mileage");

document.getElementById("seq_no").value = seq_no;
document.getElementById("mileage").value = mileage;
var param = 'vehReg='+encodeURIComponent(document.getElementById('vehReg').value);
//  alert(param);
loadVehicleInfo(param);
};

 function loadVehicleInfo(params) {
 $("#message").html('<p><font color="green">Loading...</font></p>');
 $.ajax({
     type: "GET",
     url: "http://localhost:8080/stockcloud/rest/vehicles/info",
     data: params,
     contentType: "application/json; charset=utf-8",
     dataType: "json",
     success: 
             function(data,status) {
         $("#message").empty();
         $("#message").html('<p>'+getAsUriParameters(data)+'</p>');

             },
                     error : 
                     function(XMLHttpRequest, textStatus, errorThrown) {

                         $("#message").html("<p> <font color='red'>The following error occurred: " +textStatus+ ': '+errorThrown+ "</font>");

                     }

                });
            };

    function getAsUriParameters (data) {
        return Object.keys(data).map(function (k) {
            if (_.isArray(data[k])) {
                var keyE = encodeURIComponent(k + '[]');
                return data[k].map(function (subData) {
                    return keyE + '=' + encodeURIComponent(subData);
                }).join('&');
            } else {
                return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]);
            }
        }).join('&');
        };

        function getParameterByName(name) {
           name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
          var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
               results = regex.exec(location.search);
             return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

服务器端请求代码:

@Path("/vehicles")

公共类VehiclesService {

@GET
@Path("info")
@Produces("application/json")
public Response getVehicleInfo(@DefaultValue("__DEFAULT__") @QueryParam("vehReg") String vehReg) {
       // Send SOAP Message to SOAP Server
    ServerResponse resp = new ServerResponse();

    if("__DEFAULT__".equals(vehReg)) {
        resp.setError("Vehicle registration must be supplied as a query parameter:  ?vehReg=<THE REG NO>");
        resp.setResult(false);
        Response.status(Response.Status.BAD_REQUEST).entity(resp).build();
    }

    try {
        // actual code to return the car info and return XML string with the info.

        connection.disconnect();
        String xml = URLDecoder.decode(s.toString(),"UTF-8");
        xml  = xml.replace("&lt;", "<").replace("&gt;", ">").replace("<?xml version='1.0' standalone='yes' ?>", "");
        System.out.println(xml);

        resp.setVehicle(new VehicleParse().parse(xml));
        resp.setResult(true);
    } catch(Exception e) {
        resp.setResult(false);
        resp.setError(e.getMessage());
        e.printStackTrace();
        Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(resp).build();
    }

    return Response.status(Response.Status.OK).entity(resp).build();
    }
}

我有什么不对的吗?

感谢。

0 个答案:

没有答案