location.search对我来说并不适用

时间:2012-10-19 19:57:56

标签: javascript

当我输出window.location.search时,它会显示如下结果:

?x = 0.8690746387001127或任何其他数字

但实际上应该是

?文件名= tryjsref_loc_search

有人可以解释为什么会这样做吗?

这是我的示例代码

// page url:http://w3schools.com/jsref/tryit.asp?filename=tryjsref_loc_host

<!DOCTYPE html>
<html>
<body>

<script>

document.write(window.location.search)

</script>

</body>
</html>

代码输出

?x = 0.8690746387001127

2 个答案:

答案 0 :(得分:2)

首先,w3schools is not a good website to learn from。我建议使用jqFundamentals(“javascript基础”部分)

话虽如此,window.location.search为您提供了窗口的当前查询字符串。对于w3school的“试用”网站,这似乎是Math.rand(),通常用作cachebuster技术。

如果您在点击“提交”按钮时运行了小提琴手(或任何其他网络流量监控器),您会看到完整的网址为http://w3schools.com/jsref/tryit_view.asp?x=0.42147885356098413

MDN是javascript文档的绝佳来源,他们在window.location.search上的输入说:

  

搜索| URL后面的部分是?符号,包括?符号。 | Q = devmo

答案 1 :(得分:1)

我认为你对HTML和HTTP不是很熟悉,并且你正在学习,因此没有调查页面的源代码来找出发生了什么。

那完全可以。

以下是该页面源代码的简化版本:

<form id="tryitform" name="tryitform"
      action="tryit_view.asp" method="post"
      target="view"
      onsubmit="validateForm();">

    Source Code: <input type="button" value="Submit Code &raquo;"
                        onclick="submitTryit()">

    Result: <textarea id="pre_code">
        <!-- Your source code goes here -->
    </textarea>

    <input type="hidden" id="code" name="code" />
    <input type="hidden" id="bt"   name="bt"   />

    <iframe id="viewIFRAME" name="view"
            src="tryit_view.asp?filename=tryjsref_loc_host">
    </iframe>

</form>


<script type="text/javascript">

// This Script is called when you press the "Submit Code" button
function submitTryit()
{
    // I'll omit the code, but what it does is this:

    // 1. Take the text (your code) in the 'pre_code' textarea
    // and substitute '=' with 'w3equalsign'
    // and 'script' with 'w3scrw3ipttag'.

    // 2. Put the modified text in the 'code' hidden input field

    // 3. Change the form's action to "tryit_view.asp?x=" + a random number

    // 4. Call validateForm(), which basically
    // only checks if the code doesn't exceed 5000 characters

    // 5. Submit form
}

window.onload = function(){ submitTryit() }
// Call submitTryit() when the page first loads
// so the view is filled also when you first arrive.

</script>

这里要理解的关键想法是,您编写的代码位于action属性设置为“tryit_view.asp?x =”+随机数和target的表单上属性设置为“查看”。表单上的此target属性表示表单提交的结果应显示在iframe上,其中属性name设置为“查看”。

所以你看,问题是你的代码实际上并没在你在浏览器上看到的页面上运行。它实际上是通过POST发送到服务器的 然后,服务器使用不同的页面进行响应,该页面将填充iframe的内容。

iframe基本上是一个嵌入主页内的“矩形迷你浏览器”,它有一个不同的URL,与主页的URL无关,也不会出现在地址栏上。此URL是表单操作的URL。

现在可能是服务器响应POST所做的只是创建一个包含您提交的代码的HTML页面,然后恢复上面那些奇怪的文本替换。
因此,您的代码最终会在iframe内运行。

因此,当您撰写window.locationlocation时,您的代码最终会真正访问iframe的位置,而不是主页的位置。

您可以像这样访问父页面的位置:

// 'parent', same as 'window.parent', refers to
// the frame which is the parent of the frame where
// this code is being run (the iframe named 'view').
document.write( parent.location.search );

或者像这样:

// "top" is the frame at the top of the frame hierarchy
document.write( top.location.search );

祝你好运!