2013-03-04 62 views
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参数undefined ŝ

<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

如果您在网址中公布了实际字符,而不是服务器端语言,那么人们可能会更容易看到发生了什么? – adeneo 2013-03-04 22:47:24

回答

0

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

这当然是,如果你的url参数中有一个Page变量。否则,您将从vars阵列中获得undefined

因此,如果我得到正确的想要实现的是将"/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 },... 

这是否解决您的问题?

+0

试过这两个例子,仍然页面未定义 – CareerChange 2013-03-04 23:01:38

+0

在Chrome浏览器中,点击链接后页面看起来如何,页面不显示http:// localhost:50435/Search-Results-For?q = hotels&Option = Web – CareerChange 2013-03-04 23:08:54

+0

然后,解释为什么'vars ['page']'在您的javascript中未定义。检查为什么页面参数没有出现在你的url中是另一回事。 – benzonico 2013-03-04 23:10:57

0

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

我会建议更换这行:

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

有了这一个:

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

注意,这也处理凡是有本身的价值未编码=迹象边缘情况。

然后只要确保您更新data: {"q".....行只使用小写字母。

+0

嗨benzotropo抱歉,所有变量现在undefined – CareerChange 2013-03-05 08:27:14