【问题标题】:Error on JQuery Ajax Cross Domain Java Web Service callJQuery Ajax 跨域 Java Web 服务调用出错
【发布时间】:2018-12-25 22:13:26
【问题描述】:

在跨域上使用 JQuery Ajax 进行 Web 服务调用时出现错误。

我的 JQuery 代码是

window.myCallback = function(data) {
   alert(JSON.stringify(data));
};

$("#submit").click(function(event){
  $.ajax({
    url:  "http://jsfiddle.net/echo/jsonp/",
    type: 'GET',
    dataType: 'jsonp',
    jsonp: 'callback',
    jsonpCallback: 'myCallback'
  });
});

我的服务器代码是java web service

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

@Path("/users")
public class UserDetails {

  @GET
  @Produces({MediaType.APPLICATION_JSON})
  public Response getUserDetails(){
      User user = new User("sam","smith","abc123","xyz");
      ResponseBuilder rb = Response.status(200).entity(user);
      return rb.header("Access-Control-Allow-Origin", 
 "*").header("Access-Control-Allow-Headers", "*").build();
  }
}

错误:

【问题讨论】:

  • 您没有收到 JSONP 响应,您收到的是 JSON - JSONP 将是 application/javascript
  • 错误是什么?
  • @ArashKazemi 看图片

标签: jquery ajax


【解决方案1】:

您没有收到 JSONP 响应,您收到的是 JSON - JSONP 将是 mime 类型 application/javascript

您的应用程序需要返回(在 PHP 中,您需要找出 MediaType.APPLICATION_JSONP 在您的 JAVA 中的样子 - 可能在这里 REST - Jersey -Providing Cross Site Access

header("content-type: application/javascript");
echo $callback.'({"...":"..."})';

而不是

header("content-type: application/json");
echo '{"...":"..."}';

所以让客户端消费 JSON,试试

$("form").on("submit",function(event){ // better than click a submit
  event.preventDefault(); 
  $.getJSON("yourserverprocess",myCallback);
});

【讨论】:

  • 我需要在服务器端还是客户端进行更改?
  • 要么。他们必须匹配。如果您发送 JSONP 客户端似乎没问题,如果您发送 JSON,则需要更改客户端
  • 如果我选择在客户端进行更改,需要进行哪些更改?
猜你喜欢
  • 1970-01-01
  • 2013-05-15
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2013-05-10
  • 2012-02-11
相关资源
最近更新 更多