我正在使用Java Restfull Webservice,它在postgres SQL中转储数据。 Java WebService函数完全正常工作。函数如下所示
@Path("/db")
public class DBOperaions {
@POST
@Path("/insert")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public String InsertDBData(@PathParam("hname") String hname,
@PathParam("hdates") String hdates,
@PathParam("hremark") String hremark,
@PathParam("isDelete") boolean isDelete,
@PathParam("created_date") String created_date,
@PathParam("updated_date") String updated_date) {
//Data Dumping Code
}
}
现在我尝试从Jquery Ajax访问此函数,如下所示
var obj = { hname: $("#txtRuleName").val(), hdates: $("#txtRuleDates").val(), hremark: $("#txtRuleRemark").val(), isDelete: false, created_date: 'CURRENT_TIMESTAMP', updated_date: 'CURRENT_TIMESTAMP' };
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",
xhrFields: {
withCredentials: true
},
url: "http://localhost:8015/PostGresTestDB/rest/db/insert",
data: JSON.stringify(obj),
success: function (data, textStatus, jqXHR) {
alert('Data Inserted successfully...');
},
error: function (jqXHR, textStatus, errorThrown) {
alert('generateReportFromMR:Error in processing!');
//alert(jqXHR);
}
});
Webservice在http://localhost:8015/PostGresTestDB/rest/db/insert的tomcat服务器上运行 和http://localhost:42229/index.html
上运行的网页我收到以下错误
XMLHttpRequest无法加载http://localhost:8015/PostGresTestDB/rest/db/insert。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:49927'因此不允许访问。
我尝试过CORS但没有成功。
任何人都能告诉我我想为此做些什么吗?
答案 0 :(得分:1)
您可以尝试使用' jsonp'作为您的请求的数据类型。通过使用它,您需要在javascript中指定一个回调函数,该函数将包含解析json响应的实现。在' jsonpCallback'中设置的值$ .ajax函数的选项必须与您将在javascript中实现的单独回调函数相同。而不是在“成功”中编写用于解析的代码。 $ .ajax的属性,您将在回调函数中执行此操作。您还需要在Java源代码中修改数据转储代码,首先使用与您在' jsonpCallback'中指定的回调函数同名的字符串包装JSON响应。在做实际的回复写作之前。
答案 1 :(得分:1)
正如贾斯汀所说,jsonp会解决问题。但是,它并不适用于所有情况,因为您必须遵循jsonp格式。如果您可以访问服务器代码,则一种解决方案是将服务器配置为允许您的域。将允许原点设置为*以允许所有原点。此链接可能会有所帮助:CORS on Tomcat