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 に答える