无效的JSON原语作为javascript参数

本文关键字:javascript 参数 原语 JSON 无效 | 更新日期: 2023-09-27 18:17:00

我有这个错误。我总是对这个引号有问题:(

<a class="btn-xs btn-info" title="Login As User" onclick="genericAjax("/Admin/LoginAsUser.aspx/LoginAs",{"UserUId":"854c46fc-6e50-4574-a103-16e16f24bf38"})" href="#">Login</a>
function genericAjax(url, data) {
    $.ajax({
        type: "POST",
        url: url,
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) { }
    });
}

    [WebMethod]
    public static object LoginAs(string UserUId)
    {
        //somecode
    }

Button Creator Javascript

 var param = '{';
                    for (t in CustomButtonJson[i].param)
                        param += '"' + CustomButtonJson[i].param[t]["Key"] + '":"' + rowData[CustomButtonJson[i].param[t]["Value"]] + '",';
                    param = param.substring(0, param.length - 1) + '}';
                    var ajax = 'genericAjax("' + CustomButtonJson[i].url + '/' + CustomButtonJson[i].ajaxMethod + '",' + param + ')';

                    button += 
                        "<a class='btn-xs btn-info' href='#' onclick=" + ajax + " " +
                            "title='" + CustomButtonJson[i].title + "'>" + CustomButtonJson[i].name + "</a>";

无效的JSON原语作为javascript参数

onclick='genericAjax("/Admin/LoginAsUser.aspx/LoginAs",{"UserUId":"854c46fc-6e50-4574-a103-16e16f24bf38"})'

您使用双引号来包围onclick事件,但也将参数传递给genericAjax,因此JS无法区分这里的两种用途。

相反,用一组不同的字符(单引号)包装整个内容(我认为你也可以选择转义这里的引号,但这是我能看到的最简单的解决方案)。

有趣的是,StackOverflow代码片段的颜色很好地说明了我正在解释的内容。将我上面提出的解决方案的颜色与下面(你的)的颜色进行比较,你可以看到发生了什么:
onclick="genericAjax("/Admin/LoginAsUser.aspx/LoginAs",{"UserUId":"854c46fc-6e50-4574-a103-16e16f24bf38"})"

答案是:

<form id="form1" runat="server">
    <div>
        <a class="btn-xs btn-info" title="Login As User" id="btnLogin" href="#">Login</a>
        <a class="btn-xs btn-info" title="Login As User" onclick="genericAjax('/Default.aspx/LoginAs', '{&quot;UserUId&quot;:&quot;bbbb&quot;}')" href="#">Login</a>
    </div>
    <script>
        $(document).ready(function () {
            $("#btnLogin").click(function () {
                genericAjax('/Default.aspx/LoginAs', '{"UserUId":"aaaa"}');
            });
        });
        function genericAjax(url, data) {
            $.ajax({
                type: "POST",
                url: url,
                data: data,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) { alert(data.d); }
            });
            return false;
        }
    </script>
</form>