1

我们已经实现了生成 xml 响应的 web 服务。

我在通过 jquery ajax 调用它时遇到问题。

如果我将相同的文件放在同一个容器中,我会得到正确的响应。这是因为跨域策略。

请建议我如何在 jquery ajax 中使用跨域策略?

我正在使用 tomcat 作为网络服务器。所有的网络服务都部署在这台服务器上。

下面是代码。

function doajaxcall() 
{
$.ajax({
    url: "http://localhost:8080/mobile-services/rest/languages/",
    type: "GET",
    processdata: true,
    dataType: "json",
    contentType: "application/json;",
    beforeSend: function () { },
    headers : 
    {
        "Content-Type"  : "application/json",
        "Accept" : "application/json",
        "Access-Control-Allow-Origin":"http://192.168.0.1:8080/"
    },
    success: function (data) 
    {          
        alert('Data..'+data);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) 
    {
        try 
        {
            alert(JSON.stringify(XMLHttpRequest) + "\n" + textStatus + "\n" + errorThrown);
        }
        catch (ex) { alert("Exception occured.. "); }
        finally { }
    }
});

}

如果我从标头中的同一容器运行此代码,我将在标头中获得“Access-Control-Allow-Origin”:“http://192.168.0.1:8080/”。

如果我在容器外运行它,我会得到

“访问控制允许来源”:null

请建议。

4

2 回答 2

2

要解决这个问题。我已将 cors-filter-1.3.1.jar 添加到 webservices/web-inf/lib。目录。

下面是为tomcat启用跨域访问的web.xml文件配置。

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>

<filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

将 spring 3.0 webservices 的响应类型从 xml 更改为 JSON。我正在使用以下代码片段从 Web 服务读取 JSON 数据。

$.getJSON('http://localhost:8080/mobile-services/rest/languages/',
function(data) 
{
    $("#lang_1").html(data.languages[0].language);
    $("#lang_2").html(data.languages[1].language);
    $("#lang_3").html(data.languages[2].language); 
});
于 2012-06-24T17:26:52.587 回答
1

使用 JSONP(带填充的 JSON)作为跨域请求的数据类型。

例如:

(function($) {
var url = 'http://localhost:8080/mobile-services/rest/languages/test.json?callback=?';

  $.ajax({
   type: 'GET',
   url: url,
   async: false,
   jsonpCallback: 'jsonCallback',
   contentType: "application/json",
   dataType: 'jsonp',
   success: function(json) {

   //your code
    },
 error: function(e) {
   console.log(e.message);
 }
 });
 })(jQuery);
于 2012-06-22T12:51:32.437 回答