XMLHttpRequest错误请求的资源上没有“Access-Control-Allow-Origin”标头

时间:2015-02-05 02:15:15

标签: java jquery web-services postgresql

我正在使用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但没有成功。

任何人都能告诉我我想为此做些什么吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用' jsonp'作为您的请求的数据类型。通过使用它,您需要在javascript中指定一个回调函数,该函数将包含解析json响应的实现。在' jsonpCallback'中设置的值$ .ajax函数的选项必须与您将在javascript中实现的单独回调函数相同。而不是在“成功”中编写用于解析的代码。 $ .ajax的属性,您将在回调函数中执行此操作。您还需要在Java源代码中修改数据转储代码,首先使用与您在' jsonpCallback'中指定的回调函数同名的字符串包装JSON响应。在做实际的回复写作之前。

答案 1 :(得分:1)

正如贾斯汀所说,jsonp会解决问题。但是,它并不适用于所有情况,因为您必须遵循jsonp格式。如果您可以访问服务器代码,则一种解决方案是将服务器配置为允许您的域。将允许原点设置为*以允许所有原点。此链接可能会有所帮助:CORS on Tomcat