0

我正在使用 jQuery 的 getJSON 方法和 Extjs 中的方法从服务器获取一些 json 数据。

Javascript代码放在服务器A上的apache2上,Web服务放在服务器A上的tomcat7上。但是当我使用主机B访问javascript时,javascript代码中的a方法调用了Web服务。请求是从主机 B 向服务器 A 发出的,对吗?

但我收到一个错误:

XMLHttpRequest cannot load http://192.168.5.107:8080/restful/product/all/?callback=?&_dc=1384439969320&page=1&start=0&limit=25. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.5.107' is therefore not allowed access. 

我必须添加

?callback=?

到我的网址。

但是我的 jQuery 代码出现了另一个名为“Uncaught SyntaxError: Unexpected token :”的错误。我用谷歌搜索了这个,大多数人的建议是删除回调。但我必须使用它,否则我无法获取 JSON 数据。

这是我使用 jQuery 的代码:

$.getJSON('http://192.168.5.115:8080/restful/standard/id/' + id, function(data) {
        console.log('old data:\n');
        console.log(data); // use data as a generic object
        oldObj = data;
        var newObj = Object.keys(oldObj).map(function(k) {
            return { key: k, value: oldObj[k] };
        });

        console.log('new data:\n');
        console.log(newObj); // use data as a generic object
    });

甚至我添加了回调参数。Extjs 中的代码仍然出现第一个错误。

这是我的 Extjs 代码:

// create the data store
    var store = Ext.create('Ext.data.Store', {
        model: 'Product',
        proxy: {
            type: 'ajax',
            url : 'http://192.168.5.115:8080/restful/product/all/?callback',
            reader: {
                type: 'json'
            }
        }
    });

我已经尝试修复他的三天,但一无所获。我真的希望有人能帮我解决它。

4

1 回答 1

1

如果要“尝试回调”,则必须使用“jsonp”类型的代理,而不是“ajax”。

回调参数将由代理自动添加,但是您的服务器必须处理它,即使用客户端要求的实际回调名称。

这个另一个问题将为您提供一个完整的客户端和服务器示例(在答案中)。

于 2013-11-14T15:47:41.760 回答