0

谁能发现在 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>
4

2 回答 2

0

在 JavaScript 中,大小写很重要。page不一样Page

我建议替换这一行:

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

有了这个:

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

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

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

于 2013-03-04T22:54:58.187 回答
0

这似乎是一个案例问题:尝试使用vars['Page']而不是vars['page'].

这当然是如果您Page的 url 参数中有一个变量。否则你会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 },...

这能解决你的问题吗?

于 2013-03-04T22:51:55.860 回答