0

これが私のアクションコードです。これは現在、テスト目的でのみGETを許可しています

//[HttpPost]
public JsonResult BuildingBookings(string buildingName)
{
        var result = new BuildingBookings_Result(); //This has a breakline on it
        //Uninteresting code to populate result
        return Json(result, JsonRequestBehavior.AllowGet);
}

私の ASP MVC の最初の行にはブレークポイントがあります。ブラウザーで次の URL を使用して、テスト目的でこれをトリガーできます。

http://localhost:22468/Buildings/Bookings?buildingName=DoesNotExist

そして、期待される結果が返されます

{"Success":false,"Message":"Building not found","Data":[]}

しかし、jQuery からまったく同じことをしようとすると、ASP MVC アクションのブレークポイントがトリガーされません。これは、GET を使用する場合でも、関連するすべてのコードを修正して POST を使用する場合でも同じです。

//Source code in browser using Ajax
<script>
        $("#MainForm").submit(
                function () {
                        alert("Calling");
                        $.ajax({
                                url: "http://localhost:22468/Buildings/Bookings",
                                data: { buildingName: "DoesNotExist" },
                                type: "GET",
                                success: function (result) {
                                        alert("Call OK");
                                        alert("Status " + result.Success);
                                        alert("Message" + result.Message);
                                        alert("Building name " + result.Data.Name);
                                        alert("Sleeps " + result.Data.Sleeps.toString());
                                },
                                error: function (request, status, errorThrown) {
                                        alert("Call Fail");
                                        alert("status " + status);
                                        alert("request " + request.toString());
                                        alert("error " + errorThrown.toString());
                                }
                        });
                        return false;
                });
</script>      

「Calling」アラートが表示され、続いて「Call fail」、Status = 「Error」が表示されます

更新: クロスドメイン呼び出しを許可するために応答に適切なヘッダーを追加したため、これは CORS の問題ではありません。コードは GET で動作しますが、$.ajax タイプの POST または jsonp では動作しません (明らかに [HttpPost] を最初に戻します)。

4

1 に答える 1

0

HTMLファイルがfile://で開かれている場合、または別のドメイン/ポートから取得されている場合は、クロスドメインクエリであるため、セキュリティ例外が発生します。

最も一般的な解決策は、JSONPを使用することです。

もう1つはCORSです(過去にこのソリューションとの互換性の問題がありましたが、最新のブラウザーのみを使用する場合は問題ありません)。

于 2012-05-28T11:21:34.710 に答える