1

我正在尝试从 jQuery 调用一个动作。动作应该返回真或假,根据返回值我会做一些事情。

我有以下代码。

 $("#payment").click(function (e) {
       if($("#deliverytime").attr("disabled")){
            //something here...   
        }
        else
        {
            var postcode=$('#Postcode').val();
            var restId='<%:ViewBag.RestaurantId %>';
            var URL = "/Restaurant/DoesRestaurantDeliver?restid="+restId+"&&postcode="+postcode;

            $.ajax({
                 type: "GET",
                 url: URL
             }).done(function(msg) {
                        if(msg==true){
                             $('#commonMessage').html(msg);
                             $('#commonMessage').delay(400).slideDown(400).delay(4000).slideUp(400);
                             return false;
                        }
                        else{
                            $('#commonMessage').html(msg);
                             $('#commonMessage').delay(400).slideDown(400).delay(4000).slideUp(400);
                             return false;
                        }
            }); 



        }
    });

代码不起作用。它说'msg' is not defined。这不是我应该使用 jQuery-ajax 的方式吗?我究竟做错了什么?

编辑:

控制器动作

public JsonResult DoesRestaurantDeliver(Int32 restid, string postcode)
    {

        if (rest.getDeliveryPriceForPostcode(restid, postcode) == null)
        {
            return Json(Boolean.FalseString, JsonRequestBehavior.AllowGet);
        }
        else
            return Json(Boolean.TrueString, JsonRequestBehavior.AllowGet);
    }

修改功能

var postcode = $('#DeliveryInfo_Postcode').val();
            var restId = '<%:ViewBag.RestaurantId %>';
            var URL = "/Restaurant/DoesRestaurantDeliver?restid=" + restId + "&&postcode=" + postcode;
            $.ajax({
                url: URL,
                dataType: "json",
                type: "GET",
                data: "{}",
                success: function (data) {
                    if (!data.hasError) {
                        $('#commonMessage').html(data);

                        return false;
                    }
                }
            });

编辑-2

<script>
$(document).ready(function () {
    $("#checkout").click(function (e) {
        getDeliveryInfo();
    });
});
function getDeliveryInfo() {
    var URL ="/Restaurant/DoesRestaurantDeliver/6/2259"
    $.get(URL, function (data) {
        alert(data.isValid);
    });
}
</script>
<%using (Html.BeginForm())
 { %>
<input type="submit" name="submit" id="checkout"/>
<%} %>

上面的代码不起作用。但是,如果我将“结帐”按钮放在下面的表格之外,它就可以工作。

<%using (Html.BeginForm())
 { %>

<%} %>
<input type="submit" name="submit" id="checkout"/>
4

1 回答 1

1

您可以配置您的ajax 调用,如下所示

我觉得你的 ajax 调用在.done(function(msg) {}区域上有问题。

尝试 success: function (data) {}如下设置。

<script type="text/javascript">

    $(function () {

        var companyName = $("#companyname");

        $.ajax({
            url: "/Company/GetName",
            dataType: "json",
            type: "GET",
            data: "{}",
            success: function (data) {
                if (!data.hasError) {
                    companyName.html(data.companyName);
                }
            }
        });
    });

</script>

编辑

操作方法应如下所示(这是一个示例。根据您的情况进行调整)

 [HttpGet]
 public JsonResult GetName(string term)
        {
            var result = Repository.GetName(term);
            return Json(result, JsonRequestBehavior.AllowGet);
        }

编辑 2

我会使用匿名对象(isValid)(记住JSON 是一个键/值对):

动作方法

   [HttpGet]
   public JsonResult DoesRestaurantDeliver(Int32 restid, string postcode)
    {
       if (rest.getDeliveryPriceForPostcode(restid, postcode) == null)
        {
            return Json(new { isValid = false},JsonRequestBehavior.AllowGet);
        }
        else
            return Json(new { isValid = true },JsonRequestBehavior.AllowGet);
    }

然后在ajax方法里面:

success: function(data) {
    if (data.isValid) {
        ...
    }
}

编辑 3

只需如下更改您的按钮类型。(因为您没有从表单发送任何值)

<input type="button" name="submit" id="checkout"/>
于 2012-12-14T14:38:30.243 回答