文本中的星号是否会导致getJSON请求无效?

时间:2009-01-23 19:50:36

标签: javascript jquery asp.net-mvc

这真的很奇怪但是这个代码工作正常,除非用户输入的值包括asterik(*)或其他字符,如$或#。 #ticketNumber.Val()是可疑问题。我们的一些id中有一个*。任何帮助将不胜感激。

function buttonClicks() {
    var action = '/ServiceCall/IsAServiceCall/' + $('#ticketNumber').val() + '?x=' + new Date().getTime();
    $('#ticketNumberFilter').hide();
    $('#loading').show();
    $.getJSON(action,
        { ticketNumber: $("#ticketNumber").val() },
        function(callData) {
            if (callData.status == true) {
                window.location = "/ServiceCall/Show/" + $("#ticketNumber").val();
            }
            else {
                $('#loading').hide()
                $('#ticketNumberFilter').show();
                $("#ticketListMessage").slideDown("slow");
                $("#ticketNumber").val("");
            }
        });
}

这是控制器: 当有*时,控制器永远不会被击中:

    public JsonResult IsAServiceCall(string ticketNumber)
    {
        IServiceCallService scService = new ServiceCallService();
        return (Json(new { status = scService.IsAServiceCall(ticketNumber) } ));
    }

2 个答案:

答案 0 :(得分:1)

我的猜测是(正如RoBorg建议的那样),MVC框架使用的URL重写器认为*是一个特殊字符...我不能确定问题是什么,但看起来像你只需在请求之前删除星号并在服务器端再次添加星号,就可以轻松避免此问题:

var ticketNumber = $('#ticketNumber').val().split('*').join('&asterisk;');

和服务器端你可以改变这个过程。

答案 1 :(得分:0)

*不会导致问题,但#会出现问题 - 您应该使用encodeURIComponent()对该值进行网址编码:

var action = '/ServiceCall/IsAServiceCall/' + encodeURIComponent($('#ticketNumber').val()) + '?x=' + new Date().getTime();

window.location

也是如此