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=?

私のURLへ。

しかし、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'
            }
        }
    });

私は彼を3日間直そうとしましたが、何も得られませんでした. 誰かが私がそれを解決するのを手伝ってくれることを本当に願っています。

4

1 に答える 1

1

「コールバックを試す」場合は、「ajax」ではなく「jsonp」タイプのプロキシを使用する必要があります。

コールバック パラメータはプロキシによって自動的に追加されますが、サーバーはそれを処理する必要があります。つまり、クライアントが要求する実際のコールバック名を使用します。

This other questionは、クライアントとサーバーの両方の完全な例を提供します(回答にあります)。

于 2013-11-14T15:47:41.760 に答える