jQuery没有成功发布到服务器

时间:2012-05-28 11:17:22

标签: jquery json asp.net-mvc

这是我的操作代码,目前只允许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]放回第一个)

1 个答案:

答案 0 :(得分:0)

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

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

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