网页错误地重新加载到javascript关闭

网页错误地重新加载到javascript关闭,javascript,php,html,reload,Javascript,Php,Html,Reload,尝试创建一个网页,根据制造商的选择动态选择型号,只使用php mysql查询(即不使用jQuery或AJAX)。用户将选择制造商,提交表单,网页将重新加载所有用户输入和新填充的型号选择字段 我有两个表单,一个是主可见表单,其中mysql数据库需要所有输入,另一个是隐藏表单,可以通过部分输入提交。隐藏的唯一目的是提交制造商并维护用户在页面上提供的所有其他输入 <form id="partialnew" action="page.php" method=

尝试创建一个网页,根据制造商的选择动态选择型号,只使用php mysql查询(即不使用jQuery或AJAX)。用户将选择制造商,提交表单,网页将重新加载所有用户输入和新填充的型号选择字段

我有两个表单,一个是主可见表单,其中mysql数据库需要所有输入,另一个是隐藏表单,可以通过部分输入提交。隐藏的唯一目的是提交制造商并维护用户在页面上提供的所有其他输入

<form id="partialnew" action="page.php" method="post">
    <input id="partialnewmodel" name="partialnewmodel" type="hidden">
    ... other similar inputs ...
</form>

<form id="new" action="page.php" method="post">
    <select id="newmanufacturer" name="newmanufacturer" onchange=populatemodels() form="partialnew">
        <option value="">-</option>
        <?php
            ... populated from mysql query ...
        ?>
    </select>

    <select id="newmodel" name="newmodel" required>
    </select>
    ... other inputs ...
</form>

... 其他类似的输入。。。
-
... 其他输入。。。
制造商输入采用主格式,因此正确显示在页面上,但它链接到部分格式,因此可以在没有其他所需输入的情况下提交

更改制造商后,我将所有主要表单输入复制到隐藏表单,并在该部分表单上调用form.submit()。重新加载页面时,我会根据所选制造商查询数据库中的型号。然后我使用echo将维护的值加载到javascript中

echo "<script>
        var manufacturer = '';
        var model = '';
        ... other variables ...
";

if (isset($_POST['newmanufacturer']) && $_POST['newmanufacturer'])
{
    echo "manufacturer = '{$_POST['newmanufacturer']}';";
}

if (isset($_POST['partialnewmodel']) && $_POST['partialnewmodel'])
{
    echo "model = '{$_POST['partialnewmodel']}';";
}

... load other inputs into javascript ...

echo "</script>";    // <--- After this command, the webpage reloads
echo”
var制造商=“”;
var模型=“”;
…其他变量。。。
";
如果(isset($_POST['newmanufacturer'])和&$_POST['newmanufacturer']))
{
echo“manufacturer='{$_POST['newmanufacturer']}';”;
}
如果(isset($\u POST['partialnewmodel'])和&$\u POST['partialnewmodel']))
{
echo“model='{$_POST['partialnewmodel']}';
}
... 将其他输入加载到javascript。。。
回声“;//
这就是问题所在。因为它不在函数内部或其他范围内,所以它实际上是
window.location
的别名(因为
window
是基于浏览器的JS中的默认对象)。设置该值是对浏览器的指示,以导航到该值中指定的页面。(如果像本例中那样设置空字符串,它将再次导航到当前URL。)

下面是一个概念证明,展示了这种行为:

您只需将变量命名为其他名称,例如:

var loc = '';

(当然,您也可以采用不同的设计方法,不需要创建大量全局变量。)

populatemodels
做什么?如果没有php代码,响应是什么样子的?我们很难猜测问题是什么。在页面提交时,最初设置的表单变量将随着新页面的加载而消失。新代码运行。。。。。我们不知道新代码中有什么。所以我会说,从注释大量代码开始,然后慢慢地将其添加回去,直到找到冒烟的枪。我甚至会更进一步。如果每次提交都要刷新页面,而不是使用ajax,那么两种表单会使事情变得不必要的复杂。解决这个问题可能会很好地解决当前的问题。生成刷新页面时,您应该能够填写默认值或标记所选选项。除此之外,这些应该是
GET
用于阅读
POST
用于更改存储的数据。就像你现在看到的,如果用户点击后退按钮,事情就会变得一团糟。。。对用户来说非常烦人。那么…你是说当页面加载时,你看到的最后一件事是
是否在控制台中加载到js
?然后重新加载?它是否重新加载完全相同的页面?刷新是获取还是发布?如果您将开发人员工具设置为在请求之间保留网络日志和控制台,则您可能能够看到是什么触发浏览器执行重新加载
var location=''…当然。就这样<代码>位置
窗口的别名。位置
。我希望你不需要我告诉你这是怎么回事。概念证明:。您必须将变量命名为其他名称,例如。(另外,如果你按照我的建议将所有这些东西放在一个对象中(你可以很容易地使用PHP通过json_encode创建),那么无论如何都不会出现这种情况。或者按照前面的建议,使用AJAX而不是2个表单,这样你就不需要重新填充代码。
var location='';
var loc = '';