尝试获取查询字符串值时未定义

时间:2013-03-04 22:42:05

标签: javascript jquery ajax

任何人都可以找出3个查询字符串参数中的原因,2个获取值,1个未定义。

<li class="@ViewBag.ShowNext">@Html.RouteLink("Next »", "Search", new { page = @ViewBag.NextPage, q = @ViewBag.TextClean, Option = @ViewBag.Option }, new { id = "frmPageNext" })</li>

使用Javascript / jQuery的

var vars = [], QStrings;
var q = document.URL.split('?')[1];
if (q != undefined) {
    q = q.split('&');
    for (var i = 0; i < q.length; i++) {
        QStrings = q[i].split('='); vars.push(QStrings[1]);
        vars[QStrings[0]] = QStrings[1];
    }
}

$('#frmPageNext').live('click',function (e) {
    e.preventDefault();
    $.ajax({
        url: '@Url.Action("Results")',
        data: { "q": vars['q'], "page": vars['page'], "Option": vars['Option'] },
        success: function (data) {
            alert(vars['q']);
            alert(vars['page']); //Returning undefined
            alert(vars['Option']);
            $("#dvSearchLeft").html(data).fadeIn(300);
        }
    });        
});

------------------------- URL MVC -----------------

<a href="/Search-Results-For/Hotels/Web/2" id="frmPageNext">Next &#187;</a>

The above would be <a href="/Search-Results-For/q=Hotels&Option=Web&Page=2

----------------当前代码--------------------

我试过移动javascript试图让代码工作,但是继续为所有3个参数定义

<script>



        $('#frmPageNext').live('click',function (e) {
            e.preventDefault();
            var vars = [], QStrings;
            var q = $('#frmPageNext').attr('href').split('?')[1];
            if (q != undefined) {
                q = q.split('&');
                for (var i = 0; i < q.length; i++) {
                    QStrings = q[i].split('='); vars.push(QStrings[1]);
                    vars[QStrings[0]] = QStrings[1];
                }
            }
            $.ajax({
                url: '@Url.Action("Results")',
                type: 'Get',
                data: { "q": vars['q'], "Page": vars['page'], "Option": vars['Option'] },
                dataType: 'html',
                success: function (data) {
                    alert(vars['q']);
                    alert(vars['page']);
                    alert(vars['Option']);
                    $("#dvSearchLeft").html(data).fadeIn(300);
                }
            });


        });

    </script>

2 个答案:

答案 0 :(得分:0)

这似乎是个案的问题:尝试使用vars['Page']代替vars['page']

这当然是您的网址参数中有Page变量。否则,您将从undefined数组中获得vars

[评论后编辑] 因此,如果我做对了你想要实现的是将"/Search-Results-For/Hotels/Web/2"转换为ajax查询字符串。然后你会做类似的事情:

var splittedHref = $('#frmPageNext').attr('href').split("/");
var q = splittedHref[2];
var Option = splittedHref[3];
var Page = splittedHref[4];
$.ajax({
  url: '@Url.Action("Results")',
  type: 'Get',
  data: { "q": q,"Page": Page, "Option": Option },...

这可以解决您的问题吗?

答案 1 :(得分:0)

在JavaScript中,案例很重要。 pagePage不同。

我建议更换这一行:

vars[QStrings[0]] = QStrings[1];

有了这个:

vars[QStrings.shift().toLowerCase()] = QStrings.join("=");

请注意,这也会处理边缘情况,其中值本身有未编码的=符号。

然后确保将data: {"q".....行更新为仅使用小写字母。