我可以在JavaScript中使用ajax吗?我用过,但没有';行不通

我可以在JavaScript中使用ajax吗?我用过,但没有';行不通,javascript,ajax,Javascript,Ajax,我在JavaScript中使用了AJAX,当某个条件为真时,我想发送一些参数并将按钮值从lock设置为unlock。但它不起作用,我的意思是它不适用于AJAX 这是我的代码,它是通过按钮onclick函数调用的: <script type="text/javascript"> function change() { var elem = document.getElementById("lockId"); var orderid = docum

我在JavaScript中使用了AJAX,当某个条件为真时,我想发送一些参数并将按钮值从lock设置为unlock。但它不起作用,我的意思是它不适用于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>

函数更改(){
var elem=document.getElementById(“lockId”);
var orderid=document.getElementById(“订单号”);
如果(元素值==“锁定”){
$.ajax({
键入:“POST”,
数据:{Lock_Id:1,Order_No:orderid},
url:'@url.Action(“锁定单击”、“命令”),
成功:功能(结果){
elem.value=“解锁”;
}
});
}否则如果(元素值==“解锁”){
$.ajax({
键入:“POST”,
数据:{Lock_Id:0,Order_No:orderid},
url:'@url.Action(“锁定单击”、“命令”),
成功:功能(结果){
elem.value=“锁定”;
}
});
}
}

非常感谢您的帮助,我可能在某个地方出错。

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

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

首先,您需要将本机javascript数据对象转换为JSON。就这样,

data:JSON.stringify({Lock_Id: 1, Order_No: parseInt(orderid)})
您还需要指定AJAX请求的内容类型:

contentType: 'application/json',
js代码中也有以下错误:

var orderid = document.getElementById("order_no")
现在在orderid中,您拥有的是对象,而不是元素的值。我假设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)
  • 请确保您的方法参数的命名与客户端javascript中的命名完全相同-这将使您的代码更加严格和直观

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

  • 现在应该可以了

    请在下面查找固定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>
    
    
    函数更改(){
    var elem=document.getElementById(“lockId”);
    var orderid=document.getElementById(“订单号”).value;
    如果(元素值==“锁定”){
    $.ajax({
    键入:“POST”,
    contentType:'应用程序/json',
    数据:JSON.stringify({Lock_Id:1,Order_No:parseInt(orderid)}),
    url:'@url.Action(“锁定单击”、“索引”),
    成功:功能(结果){
    elem.value=“解锁”;
    }
    });
    }否则如果(元素值==“解锁”){
    $.ajax({
    键入:“POST”,
    contentType:'应用程序/json',
    数据:JSON.stringify({Lock_Id:0,Order_No:parseInt(orderid)}),
    url:'@url.Action(“锁定单击”、“索引”),
    成功:功能(结果){
    elem.value=“锁定”;
    }
    });
    }
    返回false;
    }
    
    问题可能是ajax请求的
    url
    参数:

    url:'@url.Action(“锁定单击”、“订单”),

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

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

    编辑
    如果在if语句的每个分支中放置一个警报,会发生什么?
    elem.value
    等于什么?(
    ==
    )可能有问题,这取决于
    元素值的类型。

    @Url.Action(“LockClick”、“Orders”)看起来可疑,看起来像是从动态web解决方案中撕下的,而不是JavaScript。您需要使用的实际URL是什么?是否包含jquery?jquery的重点是在javascript中使用它-它是一个javascript框架。但我从未见过像@Url.Action()这样的东西。奇怪的标题。AJAX中的J代表Javascript,你知道吗?@JeffWatkins:我以前使用过相同的AJAX语法,但在我使用按钮更改功能后,它不会触发,谢谢,@anton norko。你说得对。删除错误答案。亲爱的@Anton Norko,它没有给出任何错误,我在change函数中添加了警报,但只有ajax不起作用,它没有将参数传递给我在URL中提供的所需操作这是controller中的操作:public ActionResult LockClick(int Lock_Id,int order_No,int cust_acctNo,int store_Id=0){Orders Orders=new Orders();Orders.UnLock_Trade_order(1,order_No);return RedirectToAction(null,new RouteValueDictionary)(new{controller=“Orders”,action=“Edit”,订单号=订单号,客户号=客户号,门店号=8};}非常感谢,先生,这很有效,非常感谢。但是先生,我没有什么问题,当我点击锁定按钮时,它最初会按照我的代码更改为解锁,但当页面再次刷新时,它会更改为锁定,我希望在我点击按钮后,按钮的值会永久更改,希望你明白我的问题。@Hamadkhan-你需要存储锁定\在某个地方解锁状态。然后在您的常规操作方法上,您只需读取该状态,然后根据该状态呈现按钮。锁定\解锁状态可以通过模型中的特定字段或TempData[“L”传递给视图