我正在使用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的屏幕截图。标记的也来自我的申请。
图像:
我还粘贴了用于制作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("<", "<").replace(">", ">").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();
}
}
我有什么不对的吗?
感谢。