1

dotnetnuke モジュールを開発していますが、javascript を介して Web サービスに接続してデータを取得する際に多くの問題があります。

私は次のjavascriptを持っています:

function Test() {
        $.ajax({
            type: "POST",
            url: 'http://localhost/DNN11/service1.asmx/TestMethod',
            data: "{'data':'" + "abc" + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                alert("success");
            },
            error: function(e) {
                alert("error");
            }
        });


    }

次に、私のWebサービスで次のWebMethod

[WebMethod]
    public string TestMethod(String data)
    {
        return "Hello World";
    }

ただし、投稿が正常に呼び出されない場合、Web サービスを通過できません。500 Internal Server エラー ページが表示され続けます。

何が間違っている可能性がありますか?これについて他に必要な方法はありますか?

ありがとう

[編集]

これがコード全体です

<script type="text/javascript">
    function Test() {

        $.ajax({
            type: "POST",
            url: '<%=ResolveUrl("~/DesktopModules/ModuleTest/WebService1.asmx/TestMethod")%>',
            data: '{ data: "test" }',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                alert("Success: " + msg);
            },
            error: function(msg) {
                alert("Failed: " + msg.status + ": " + msg.statusText);
            }
        });   

    }
</script>

<div>
    <input type="button" value="Load" onclick="Test(); return false;" />
</div>

[System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod()]
        public string TestMethod(string data)
        {
            return "Hello World";
        }
    }

Webservice を新しいフォルダーの DotNetNuke フォルダーとローカル プロジェクトの両方に配置しようとしました。また、ScriptMethod() タグを WebService に配置して、スクリプトがそれを呼び出せるようにします。しかし、まだ何もありません。

4

2 に答える 2

1

あなたの問題はクロスドメイン呼び出しであるようです。ページがWebサービスと同じサーバーでホストされている場合、コードは問題ありません。別のドメインからサービスとやり取りする必要がある場合は、jsonp リクエストを使用する必要があります。こちらのコード例を含むこの優れたステップバイステップ ガイドをご覧ください。

アップデート

同じアプリのすべてが関連する URL を使用しようとする場合。url: '<%=ResolveUrl("~/DesktopModules/ModuleTest/WebService1.asmx/TestMethod")%>'しようとする代わりにurl: '/DesktopModules/ModuleTest/WebService1.asmx/TestMethod'

于 2013-01-26T19:07:34.393 に答える
0

ページから DNN Web サービスに投稿するには、モジュールのコンテキストを渡す必要があります。DNN6 に対して動作するサンプル コードがいくつかあります。

http://slidepresentation.codeplex.com/SourceControl/changeset/view/69709#1181962

主に

servicesFramework: $.ServicesFramework(<%=ModuleContext.ModuleId %>)

ライン

最新のサービス フレームワーク WebAPI の変更を使用して、DNN7 に対してテストしていません。

于 2013-01-29T04:57:36.077 に答える