1

私のセットアップはこのようなもので、両方のサーバーが異なるドメインにあります。

  1. Microsoft が Office365 でホストする、HTML/JavaScript アプリを使用した SharePoint Foundation 2013。
  2. Windows Server 2012 と Dynamics NAV 2013 は、Microsoft によって Azure でホストされています。

私がやりたいことは、jQuery を介して NAV 2013 oData Web サービスを呼び出すことです。ブラウザから Web サービスにアクセスできることを確認しましたが、正常な応答が得られます。

しかし、SharePoint のアプリから呼び出そうとすると、エラーが発生します。

SyntaxError: syntax error <?xml version="1.0" encoding="utf-8" standalone="yes"?>

これは私のjQueryコードです:

var call = $.ajax({
    url: 'http://url:port/DynamicsNAV70_Instance/odata/MyService',
    type: "GET",
    crossDomain: true,
    username: "username",
    password: "password",
    dataType: "jsonp",
    headers: {
        Accept: "application/json;odata=verbose"
    }
});

call.done(function (data, textStatus, jqXHR) {
    console.log(data.d);
});

call.fail(function (jqXHR, textStatus, errorThrown) {
    console.log("Call failed. Error: " + jqXHR.statusText);
});

「jsonp」が XML 応答でうまく機能しないことを発見しましたが、この呼び出しは json を返す必要がありますか?

また、FireBug では、サービスから返された完全な XML を実際に見ることができ、完全に正しいものです。私のアプリは正しい XML を取得しますが、解析エラーのように見えますか?

また、Dynamics サーバーで CORS ( http://enable-cors.org/index.html ) を有効にすることも考えましたが、これを行う方法がわかりません。

4

2 に答える 2

0

この回答を数回検索しましたが、おそらく Windows 資格情報を渡したいため、うまくいきませんでした。

この記事http://www.telerik.com/blogs/cross-domain-queries-to-odata-services-with-jqueryとこのページhttps://msdn.microsoftを読んだ後、ようやく何かが機能するようになりました (NAV2015) 。 .com/en-us/library/dn127071(v=nav.80).aspx . 答えは、ドメイン間の制限を回避するように設計された jsonp を使用する必要があるようです。

これが誰かに役立つことを願っています:-)

$.ajax({        
    url: 'http://Server:Port/DynamicsNAV80/OData/Service?$format=json&$callback=?',
    contentType: 'application/json; charset=utf-8',
    dataType: "jsonp",
    type: "GET",
    xhrFields: {
        withCredentials: true
    },
    dataType: "jsonp",
    success: function (data) {
        alert(JSON.stringify(data));
    },
    error: function (xhr, textStatus, errorMessage) {
        alert('Error: ' + errorMessage);
    }
});

注: IE と Chrome では、これは期待どおりに機能します。資格情報を通過するだけです。Firefox では、ログインを 2 回求められます。1 回はサイト用、もう 1 回はサービス用です。これが Firefox の設定なのか、Web.config で見逃したものなのかわかりません。

于 2016-01-11T12:06:03.503 に答える