0

asp.net mvc Web サービスから json を受信しようとしています。ASP.NET:

    public JsonResult getMessagesFromFriend(string email, string friendmail) {
        DataLayer.Repository.Classes.DataLayer dl = DataLayer.Repository.Classes.DataLayer.Instance;
        return Json(dl.getMessagesFromFriend(email, friendmail);
    }

httpアナライザーでテスト投稿メッセージを送信すると、次のようになります。

    Tue May 01 11:24:59 CEST 2012
    ----------------------------------------
    POST http://xxx.xxx.xxx.xxx/tracy/chat/getMessagesFromFriend?email=linsy&friendmail=djcarre
    HTTP/1.1 200 OK
    Cache-Control: private
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.5
    X-AspNetMvc-Version: 4.0
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    Date: Tue, 01 May 2012 09:25:04 GMT
    Content-Length: 309

    ----------------------------------------
    ----------------------------------------
    [{"sender":"viagsm","receiver":"djcarre","datetime":"28/04/2012 16:55:33","message":"msg1"},{"sender":"viagsm    ","receiver":"djcarre","datetime":"28/04/2012 16:55:59","message":"msg2"},{"sender":"Philippe C","receiver":"linsy","datetime":"28/04/2012 16:56:10","message":"test3"}]
    ----------------------------------------

だから、私のjsonを返しています。私のJavaScriptコードは次のようになります:

    $.post("http://xxx.xxx.xxx.xxx/tracy/chat/getMessagesFromFriend?email=linsy&friendmail=djcarre", function(data) {
     if (data.length > 0) {
                  for (x in data) {
                      $("#chatarea").html(
                      $("#chatarea").html() +
                      "<p><b>" +
                      data[x].sender + "</b>" + 
                      " (" + data[x].datetime.match(/(\d+:\d+:\d+)/)[1] + ") : " + 
                      data[x].message + "</p>");
                  }
              }
    }, "json");

}

firebug を見ると、投稿が送信され、200 の OK が返されますが、回答は空のままです。私も $.ajax で試してみました

    error:function(jqXHR, textStatus, errorThrown){
        alert(errorThrown);
    }

しかし、空のアラートしか表示されないため、エラーがありますが、どれがどのように解決するのかわかりません。誰かが私を助ける方法を知っていることを願っています。

敬具

4

4 に答える 4

1

AJAX リクエストに絶対アドレスを指定したようです:

http://xxx.xxx.xxx.xxx/tracy/chat/getMessagesFromFriend?email=linsy&friendmail=djcarre

ブラウザーに組み込まれている同一オリジン ポリシーの制限により、クロス ドメイン AJAX 要求を送信することはできません。リモート ドメインに対する制御レベルに応じて、いくつかの回避策があります。

于 2012-05-01T10:08:09.123 に答える
0

はい、Darinが述べたように、オリジンポリシーに注意する必要があるため、ajax呼び出しは、JavaScriptを記述したページを提供しているのと同じドメインおよびサブドメインにある必要があります。

追跡する別の方法は次のとおりです。 - ajax 呼び出しがサーバーに到達しているかどうかを確認します。そのためには、db のテーブルを更新するか、POST データ コンテンツを含むファイルをローカル ドライブに置き、タイムスタンプ付きのファイルとしてダンプすることができます。このステップが失敗した場合は、リクエストがサーバーにまったく到達していないことを意味するため、クロスサイト ajax の問題であるかどうかを確認する必要があります。そのためには、送信元と同じサーバーにファイルを配置して修正する必要があります。ページを提供してから、ASP.NET を使用してサーバー経由で実際のサービス/ページ コンテンツを呼び出します。

  • また、以前のチェックに合格した場合は、送信している出力をダンプして、送信しているものを確認してください。

これは役立つはずです、頑張ってください。

于 2012-05-01T10:15:29.570 に答える
0

多くの検索の後、私はこれを見つけました: Ajax json post to Controller across domains, "not allowed by" Access-Control-Allow-Headers それは私の問題の解決策を提供しました.

私のスクリプトは携帯電話で実行され、Web サービスはリモート サーバーで実行されていたため、jsonp を使用する必要がありました。助けてくれてありがとう !

于 2012-05-02T08:53:24.930 に答える
0

$.post(url, para, successFunction, ErrorFunction);
パラメータを関数に入れるのを忘れました。だからうまくいきません。

于 2012-05-01T10:08:13.107 に答える