如何在ajax页面中获取查询字符串或URL?

时间:2014-09-26 10:15:26

标签: javascript jquery ajax query-string

我找到了从this question获取查询字符串的方法。但我无法通过ajax获取请求页面内的URL。

示例:

<div class="result"></div>
<script>
    $(function() {
        $.ajax({
            url: 'ajax_inner.html',
            type: 'GET',
            data: 'somename=someval',
            dataType: 'html',
            success: function(data) {
                $('.result.).html(data);
            }
        });
    });
</script>

这是main.html页面。以下是ajax_inner.html页面。

<p>your query string is: <span class="qsval"></span>.</p>
<script>
    function getParameterByName(name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
            results = regex.exec(location.search);
        return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    }// getParameterByName

    $(function() {
        $('.qsval').text(getParameterByName('somename'));
    });
</script>

我无法从传递给ajax页面的查询字符串中获取任何内容。 我在ajax页面内尝试了alert(location);,但它返回了main.html页面。

如何在 ajax页面中获取查询字符串

2 个答案:

答案 0 :(得分:2)

您必须记住,使用.html注入<script>标记会使脚本在调用页面上执行,而不是在目标页面上执行。您需要让服务器根据QueryString更改ajax_inner.html的内容。

然后你必须问自己,你为什么要在目标上执行脚本,而不是在成功回调中?为什么不这样做:

success: function(data) {
    $('.result').html(data).find(".qsval").text("someval");
}

"someval"可以来自任何局部变量。

答案 1 :(得分:2)

基本上问题是没有&#34; Ajax页面&#34;使用自己的URL,只动态加载一些HTML内容并插入另一个/唯一页面。如果ajax_inner.html内容从一开始就在页面中而不是动态加载,那么它们将处于相同的上下文中(尽管如果在加载时页面上显示包含的脚本显然会更快执行)。它没有自己的范围,location因此只是引用父/唯一页面的location属性。

您可能会混淆使用<iframe>动态加载HTML内容,它们有自己的页面范围,可以这么说。