我可以在JavaScript中使用ajax吗?我已经使用过但不起作用

时间:2015-09-07 16:00:01

标签: javascript ajax

我在JavaScript中使用了AJAX,我想发送一些参数,并在某个条件为真时将按钮值从锁定设置为解锁。但它不起作用,我的意思是它没有进入AJAX。

这是我的代码,使用按钮onclick函数调用:

<script type="text/javascript">
    function change() {
        var elem = document.getElementById("lockId");
        var orderid = document.getElementById("order_no");
        if (elem.value == "Lock") {
            $.ajax({
                type: 'POST',
                data: {Lock_Id: 1, Order_No: orderid},
                url: '@Url.Action("LockClick","Orders")',
                success: function (result) {
                    elem.value = "Unlock";
                }
            });
        } else if (elem.value == "Unlock") {
            $.ajax({
                type: 'POST',
                data: {Lock_Id: 0, Order_No: orderid},
                url: '@Url.Action("LockClick","Orders")',
                success: function (result) {
                    elem.value = "Lock";
                }
            });
        }
    }
</script>

非常感谢帮助,我可能在某个地方犯了错误。

3 个答案:

答案 0 :(得分:1)

首先,您需要将原生javascript数据对象转换为JSON。就像那样:

data:JSON.stringify({Lock_Id: 1, Order_No: parseInt(orderid)})

您还需要指定AJAX请求的内容类型:

contentType: 'application/json',

你在js代码中也有以下错误:

var orderid = document.getElementById("order_no")

现在有序你有对象,而不是元素的值。我假设在orderid上你只有简单的html输入字段。在这种情况下,您需要通过以下方式替换字符串:

var orderid = document.getElementById("order_no").value;

此外,您需要将 orderid 解析为int,因为它来自 .value 字符串而您期望整数在你的控制器方法中。

感谢您发布控制器代码。它有几个小错误。请使用以下字符串进行修复:

public ActionResult LockClick(int Lock_Id, int Order_No, int cust_acctNo = 0, int store_id = 0)
  1. 请确保您已完全按照客户端javascript中的名称命名方法参数 - 这将使您的代码更加严格和直观。

  2. 我添加了 cust_acctNo 参数的默认值,因为您从未将其从客户端传递到服务器端 - 在您的示例中,您只传递了两个参数而不是三个参数

  3. 现在应该可以了。

    请在下面找到修正的javascript代码:

    <script type="text/javascript">
        function change() {
    
            var elem = document.getElementById("lockId");
            var orderid = document.getElementById("order_no").value;
            if (elem.value == "Lock") {
                $.ajax({
                    type: 'POST',
                    contentType: 'application/json',
                    data: JSON.stringify({ Lock_Id: 1, Order_No: parseInt(orderid) }),
                    url: '@Url.Action("LockClick","Index")',
                    success: function (result) {
                        elem.value = "Unlock";
                    }
                });
            } else if (elem.value == "Unlock") {
                $.ajax({
                    type: 'POST',
                    contentType: 'application/json',
                    data: JSON.stringify({ Lock_Id: 0, Order_No: parseInt(orderid) }),
                    url: '@Url.Action("LockClick", "Index")',
                    success: function (result) {
                        elem.value = "Lock";
                    }
                });
            }
    
            return false;
    
        }
    </script>
    

答案 1 :(得分:0)

问题可能是ajax请求的url参数:

url: '@Url.Action("LockClick","Orders")',

如果查看浏览器的开发工具,在网络选项卡中,请求的实际URL是什么?

脚本是否嵌入某种模板中?是否可以在任何时候编译模板并将该字符串转换为实际的URL?

修改

如果在if语句的每个分支中放置一个警报,那么会发生什么? elem.value等于什么?这可能是type conversion of the loose equality operator==)的问题,具体取决于elem.value的类型。

答案 2 :(得分:-2)

最后,orderId行可能缺少.value。应该是:

var orderid = document.getElementById("order_no").value;