我正在运行JEE6和工作。glassfish v3NetBean6.9RESTful web service
我有 jsp 文件,其中包含下面的 javascript 函数。
它基本上读取信息HTML input fields并转换为JSON format.
然后onclick Ajax call,尝试使用 HTTP PUT 方法发送 JSON 字符串。(即我正在尝试UPDATE使用 REST 的数据库记录)
对于我正在使用的 js 框架是Prototype1.7
当我测试下面的函数时,它总是返回 404,因此会显示“出现问题”警报。
根据我在 1.5 版本以上的搜索原型支持 HTTP PUT/DELETE 方法,为此将_method添加到请求 URL 中,就像我正在做的那样:
var url = "/resources/inventory/" + invId + "?_method=PUT";
这将创建例如:
http://localhost:8080/NoJSF/resources/inventory/123?_method=PUT
我查看了 Firebug 和控制台,显示请求实际上是POST。不确定,但我相信这是因为 Prototype 使用 POST 隧道来实现 PUT 方法?
此外,即使正在调用 Ajax,我的带有 JAX-RS 注释和 @POST 的 Java 文件也没有被调用(@GET 版本正在处理单独的数据,所以这是正确的文件),因为它的方法的第一行吐出消息没有出现,所以我怀疑我的 Ajax 语句有一些错误,或者有超出我想象的东西.. 谁能给我提示?
function protoAjaxPut() {
//get all fields value and store into json
var invId = document.getElementById("invIdField").value;
var invName = document.getElementById("invNameField").value;
//put info into JSON format
var jsonInput = JSON.stringify(new Array(invName));
var url = "/resources/inventory/" + invId + "?_method=PUT";
new Ajax.Request(url, {
method:'put',
postBody: jsonInput,
ContentType: 'application/json',
onSuccess: function(transport) {
var responseData = transport.responseText;
document.getElementById('putResponseText').innerHTML = responseData;
},
onFailure: function() { alert('something went wrong!')}
})
}//end protoAjaxPut