在jquery get请求中获取浏览器URL中的QueryStrings

时间:2013-12-29 11:20:30

标签: asp.net-mvc

我想用jquery发送一个get请求但get函数没有将查询字符串放在地址栏中。我尝试将async设置为false但它仍然不起作用。

$("#searchForm").submit(function (event) {
            var x = $("#category").serialize();
            $.get("Home/test", x, function (data) {               
                alert(data);
            });
            event.preventDefault();
            });

上面的代码不像正常的get请求那样将查询字符串放在地址栏中。

因此我应该在浏览器地址栏中有类似Home / Text /?category = laptop

的内容

例如

指定的任何其他解决方案欢迎我可以在地址栏中输入什么查询字符串。

form id="searchForm" action="@Url.Action("Index")" method="get">    

    <input type="text" name="search" id="search />
    <div id="price">
        <input type="text" id="PriceMin" name="PriceMin" />
        <input type="text" id="PriceMax" name="PriceMax" />
    </div>
    <input type="submit" value="submit"/>
</form>

作为一个例子我不想要在

的网址查询字符串中 ?

搜索=沃尔沃&安培; PriceMin =安培; PriceMax =

换句话说,null的输入字段不应该放在get请求的url中。

THX。

找到了一些东西和它的工作原因我以前没有想到这个超出我的想法

$("#searchForm").submit(function (event) {
            if ($("#PriceMin").val() == "") { $("#PriceMin").prop("disabled", true); alert("isnull");}
            });  

如果在发送表单之前它是“”,则禁用输入字段。因此,因为该元素被禁用,所以不会发送“priceMin”的查询字符串。

1 个答案:

答案 0 :(得分:1)

地址栏没有更改的原因是因为当您使用javascript发出AJAX请求时,此请求是在后台进行的。 AJAX的重点是在不从当前页面导航的情况下发出请求。如果更改地址栏中的url将触发整个页面重新加载。所以你想要实现的目标是不可能的。您可以使用网址的片段部分(#后面的部分)。您可以修改网址的这一部分,而不会导致浏览器导航。请查看以下文章:http://ajax.rswebanalytics.com/seo-for-ajax/#!ajax-crawlable-urls

因此,您可以拥有以下网址:

http://example.com/Home/Text/#category=laptop

为了在javascript中操作url的片段部分,您可以使用window.location.hash属性。请记住,这部分网址永远不会发送到服务器。它仅用于客户端。

就你关于空字符串的第二个问题而言,在纯HTML中没有办法实现这一点。你将不得不写javascript。基本上,您必须订阅表单的.submit事件,并手动构建您将重定向到的目标URL,并排除具有空值的参数。然后使用window.location.href属性手动重定向到此URL。另外,不要忘记通过返回false来取消提交的默认操作。