我正在运行JEE6
和工作。glassfish v3
NetBean6.9
RESTful 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