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>      

我收到“呼叫”警报,然后是“呼叫失败”,状态 =“错误”

更新:这不是 CORS 问题,因为我已在响应中添加了适当的标头以允许跨域调用。该代码适用于 GET,但不适用于 POST 或 jsonp 作为 $.ajax 类型(显然我首先将 [HttpPost] 放回原处)

4

1 回答 1

0

如果您的 html 文件是在 file:// 中打开或从另一个域/端口获取的,则您会遇到安全异常,因为这是一个跨域查询。

最常见的解决方案是使用JSONP

另一个是CORS(过去我在使用这个解决方案时遇到过兼容性问题,但如果你只使用现代浏览器应该没问题)。

于 2012-05-28T11:21:34.710 回答