0

私は WebApi を構築中です - ローカルでテストしましたが、すべて正常に動作します。ホスト マシンにデプロイし、ajax 呼び出しが正しい URL を使用して webapi にアクセスしていることを確認するいくつかの問題の後、問題が発生しました。

jQuery AJAX 呼び出しを示す Razor コードを次に示します。

    string myUrl = Url.Action("Index","Home", null, Request.Url.Scheme, null);


<script type="text/javascript">
    function findByVrm() {
        $('#response').text('Searching...');

        var uri = '@myUrl' + 'api/vehicle';
        var id = $('#vrm').val();
        var call = null;

        // Setup a 'call' object differently depending upon if we want to return
        // JSON data or XML data
        if ($('#rbJson').prop('checked')) {
            call = {
                type: 'GET',
                url: uri + '?vrm=' + id
            };
        } else {
            call = {
                type: 'GET',
                url: uri + '?vrm=' + id,
                dataType: 'xml',
                accepts: {
                    xml: 'text/xml',
                    text: 'text/plain'
                }
            };
        }

        // Perform the API call
        $.ajax(call)
            .success(function (response, textStatus, jqXHR) {
                showStatus(jqXHR);

                if ($('#rbJson').prop('checked')) {
                    $('#response').html(vkbeautify.json(response));
                    $('#status').text('Vehicle Found: '+response.data.idscode);
                } else {
                    $('#response').text(vkbeautify.xml(jqXHR.responseText));  // text version of the XML
                }


            })
            .fail(function (jqXHR, textStatus, err) {
                showStatus(jqXHR);
                $('#response').text('');
            });
    }

    function showStatus(jqXHR) {
        var msg = 'Status: ' + jqXHR.status + '/' + jqXHR.statusText;
        $('#status').text(msg);

        return;
    }          
</script>

HTML は純粋に「vrm」という ID を持つテキスト ボックスです。これは検索文字列、findByVrm() JavaScript 関数を呼び出すボタン、呼び出しが JSON または XML データを返すかどうかを決定するラジオボタン、表示するテキスト ボックスです。通話のステータス、およびコンテンツを表示するテキストエリア。

ローカルホストで実行すると、これはすべて完全に機能します。リモート ホスト マシンに展開し、Fiddler で呼び出しを構築すると、完全に機能します。

ただし、リモートホストマシンでこのページを参照し、上記のコードを介して呼び出しを行うと... APIメソッドが呼び出されます(呼び出され、応答が返されたことを示すログメッセージがあります)、ステータスは更新され、200/OK が表示されます - 呼び出しが成功したことを示していますが、このインスタンスでは JSON または XML データが返されていないようです (または、返された場合は表示されません)。

これをstackoverflowや他のサイトで調査したところ、これは「クロスドメイン」の問題であると考えられ、CORSハンドラーの実装に関する他の投稿に従いましたが、webapiがリモートサーバーでホストされ、上記のJavascriptが呼び出された場合、まだ応答データが表示されません。

ここから CORS ハンドラー コードを取得しました: CORS ハンドラー

何か案は?


編集:上記の投稿と以下の質問にさらに-私が見ていた問題を個別に再現できるかどうかを確認するためにJSFiddleを作成しました-これがフィドルです

Fiddle は機能しますが、上記の Javascript は機能しません。したがって、ここでの私の最初の結論は、vkbeautify が失敗し、その結果、静かに findByVrm() メソッドを終了することです。

これについてもう少しテストを行います。しかし、私と一緒にこれを見て時間を費やしてくれたすべての人に感謝したいと思います.


編集: したがって、 vkbeautify.json() 呼び出しを削除し、 JSON.stringify() に置き換えて、その結果をテキストエリアに配置すると、これが機能します。

Visual Studio を介して localhost で実行していたときに vkbeautify が応答データに対して機能した理由はわかりませんが、それは関係ありません。JSON 応答と XML 応答の両方を「きれいに印刷」できると便利ですが、そのために私が検討できる他の解決策; これは単なるテストベッド アプリケーションであるため、応答が表示される限り、これで十分です。

改めまして、ご協力いただきありがとうございました。

4

1 に答える 1

0

前述のように、問題はvkbeautifyにありました。何らかの理由で、リモート データで動作していませんでした。ローカルで実行しているときは正常に動作していました。

この JavaScript ライブラリへの呼び出しを削除しました。JSON または XML の返されたデータをきれいに印刷するためだけにありました。

于 2013-10-30T10:29:51.100 に答える