2

私はしばらくの間、そよ風と OData を使用しようとしています。

私の OData は別のサーバーから取得され、CORS が有効になっています。問題はそよ風と odata にあると思います。なぜなら、そよ風と Web API を使用してすべてをテストしたところ、問題なく動作したからです。

ネットワーク タブのクロムでは、OData が適切にフェッチされていることがわかりますが、何らかの理由でデータが表示されず、次の奇妙なエラーが発生します。

[Q] Unhandled rejection reasons (should be empty): 
[Error]
 q.js:891
Error: OK Logger.js:52


Here is my breeze DataService:

app.adminMuscleGroup.dataService = ( function(breeze, logger) {



    breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);

    var service = new breeze.DataService({
        serviceName: "http://localhost:23758/odata/",
        hasServerMetadata: false,

    });

    breeze.config.initializeAdapterInstance("dataService", "OData");


    var manager = new breeze.EntityManager({ dataService: service });

    manager.enableSaveQueuing(true);

    var dataService = {
        getAll: getAll,
    };

    return dataService;

    function getAll() {
        var query = breeze.EntityQuery.from("MuscleGroup").orderBy("Name");

        return manager.executeQuery(query);
    }

Controller.js は次のとおりです。

app.adminMuscleGroup.controller('AdminMuscleGroupCtrl', function ($scope) {

    var dataService = window.app.adminMuscleGroup.dataService;
    var logger = window.app.logger;

    $scope.items = [];

    $scope.getAllMuscleGroups = function() {
        dataService.getAll()
            .then(querySucceeded)
            .fail(queryFailed);
    };

    $scope.getAllMuscleGroups();

    function querySucceeded(data) {
        $scope.items = [];
        data.results.forEach(function(item) {
            $scope.items.push(item);
        });

        $scope.$apply();

        logger.info("Fetched all Muscle Groups");
    }

    function queryFailed(error) {
        logger.error(error.message, "Query failed");
    }

})

コンソール ログのスクリーンショットを次に示します。

ここに画像の説明を入力

4

3 に答える 3

1

一般的に、'should be empty' と表示された場合、プロミスに未処理の拒否、未処理のエラー、またはプロミスが何らかの理由で返されなかったことを意味します。通常、このエラーが発生した場合は、console.log() の拒否理由を確認するか、使用しているロガーのようなものを使用します。これはいくつかの方法で実行できますが、executeQueryLocally などの同期クエリを使用していなければ、拒否の理由がわかります。

function getAll() {
    var query = breeze.EntityQuery.from("MuscleGroup").orderBy("Name");

    // added a promise failure handler 
    return manager.executeQuery(query).fail(queryFailed);
}

そして、以下をデータサービスに追加するか、w/e

function queryFailed(error) {
    var msg = 'Error retrieving data. ' + error.message;
    logger.logError(msg, error, 'Data call', true);
}

編集

さて、データを操作しているときに何か問題が発生していることがわかったので、何が返されるかを見てみましょう -

編集 2

この問題には、ウォードとジェイの魔法の力が必要なようです。頑張ってください!

于 2013-08-03T20:52:15.810 に答える
0

enableCors を構成するこの追加パラメーター「DataServiceVersion、MaxDataServiceVersion」を追加するだけです。

config.EnableCors(new EnableCorsAttribute(" ", " ", "*", "DataServiceVersion, MaxDataServiceVersion"));

于 2014-05-31T17:50:15.047 に答える