2013-03-04 2 views
0

Может ли кто-нибудь определить причину, по которой из трех параметров запроса, 2 получить значения и 1 не определено.Не определено при попытке получить значения querystring

<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 вокруг попытки заставить код работать, но продолжать получать undefined для всех параметров 3 S

<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> 
+1

Если вы разместили фактические символы в URL-адресах, а не на сервере, то, возможно, людям будет легче видеть, что происходит? – adeneo

ответ

0

Это, кажется, проблема случая: попробуйте использовать vars['Page'] вместо vars['page'].

Это, конечно, если у вас есть переменная Page в параметрах вашего URL. В противном случае вы получите undefined из вашего массива vars.

[Редактировать после комментария] Так что, если я получу правильный результат, вы должны преобразовать: "/Search-Results-For/Hotels/Web/2" в ajax-запрос String. Тогда вы бы сделали что-то вроде:

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 },... 

Реально ли это решить вашу проблему?

+0

Пробовал оба примера, страница еще не определена – CareerChange

+0

В Chrome это выглядит как URL-адрес после щелчка ссылки, страница не отображается http: // localhost: 50435/Search-Results-For? Q = hotels & Option = Web – CareerChange

+0

Тогда объясните, почему 'vars ['page']' не определен в вашем javascript. Другое дело - проверить, почему параметр страницы не отображается в вашем URL-адресе. – benzonico

0

В JavaScript важно дело. page - это не то же самое, что и Page.

Я бы предложил заменить эту строку:

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

С этим один:

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

Обратите внимание, что это также обрабатывает края случай, когда имеется Unencoded = знаки в самой ценности.

Затем просто убедитесь, что вы обновили строку data: {"q"....., чтобы использовать только строчные буквы.

+0

Привет, бензонико, извините, что все переменные теперь не определены – CareerChange