1

我有一个与此类似的 Web 服务方法:

@Path("/insert_update")
@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public Object insert(User obj) {
  ...(insert and return object)
}

我想从jquery调用这个方法,使用ajax。我试过这样的事情:

var rootURL = "http://Path/to/my/web/service";

function insertUpdate() {
  var user = {'name' : $("#name").val(),
              'surname' : $("#surname").val(),
              'surname1' : $("#surname1").val(),
              'usertxt' : $("#usertxt").val(),
              'password' : $("#password").val() };
  $.ajax({
         url : rootURL + "/insert_update",
         type : "POST",
         contentType: 'json',
         dataType : "json",
         data : user,
         success : function(data) {
           alert(JSON.stringify(data));
         },
         error : function(data) {
         }
  });
}

这段代码正确吗?当我尝试使用它时,我得到以下响应:

加载资源失败:Access-Control-Allow-Headers 不允许请求标头字段 Content-Type。XMLHttpRequest 无法加载...。Access-Control-Allow-Headers 不允许请求标头字段 Content-Type。

我希望你能帮助我。

问候。

更新

Web 服务在同一台机器上,但在其他端口。我在 WebSphere Application Server 上运行 Web 服务项目,然后只打开 HTML 文件来测试我的代码。

我有其他我没有问题的方法,例如:

@Path("/all")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Object all() {
  ...(get all users)
}

以及此代码的 JQuery 方法:

function all() {
$.ajax({
    url : rootURL + "/all",
    type : "GET",
    dataType : "json",
    success : function(data) {
        $("#tabla tbody:last").empty();
        $.each(data.data, function(i, item) {
            $("#tabla tbody:last").append("<tr><td>"+item.id+"</td><td>"+item.name+
                    "</td><td>"+item.surname+"</td><td>"+item.surname1+"</td><td>"
                    +item.usertxt+"</td><td>"+item.password+"</td></tr>");
        });
    },
    error : function(data) {

    }
});
}

这很好用,我没问题……但我必须下载 Chrome 的扩展程序才能在本地测试,Allow-Control-Allow-Origin

为什么使用 GET 方法我没有问题,而使用 POST 方法是?

问候。

4

0 回答 0