如何在不提交表单的情况下在php中获取表单值?

时间:2013-01-16 05:38:29

标签: php javascript html seo

我在我的旧网站中使用表单submition。因为SEO的目的我将其更改为onClick()函数,因此它将转到一个干净的URL,但当我使用此函数时,其他表单值不会进入php文件

以下是我的旧代码

 <form name="frmSearchTops" id="frmSearchTops" action="/womens/tops/" method="post">
        <select  name="cboCityNameRes" id="cboCityNameRes">
          <option value=''>City</option>
             {foreach from= $arritemCities item=foo}                      
               {if $smarty.post.hdnCityName eq $foo}                                
                  <option value="{$foo}" selected="selected">{$foo}</option>          
               {else}    
                <option value="{$foo}" {if $foo eq 'City'} selected="selected"{/if}>
                     {$foo}
                </option>
               {/if}    
             {/foreach}    
        </select>
    <select name="cboMaterial" id="cboMaterial">
      <option value="">Material</option>
      <option value="CT">Cotton</option>
      <option value="SL">Silk</option>
    </select>
     <input name="btnSearch" type="button" value="Search" id="btnSearch"/>       
 </form>

新代码如下 在这里,我在控制器操作中给出一个虚拟URL,它将重定向到womens / tops.php文件,它的重定向但是我没有得到选定类型的材料

的JavaScript

 <script type="text/javascript">

          function searchitem()
          {
        $strCity    =   document.getElementById('cboCityNameRes').value;
        window.location.href = "http://www.legacy.com/womens-tops-"+$strCity+".php";
          }
    </script>   

HTML代码

 <select  name="cboCityNameRes" id="cboCityNameRes" onchange="cityChanged()">
      <option value=''>City</option>                  
       {foreach from= $arritemCities item=foo}                        
          {if $smarty.post.hdnCityName eq $foo}                                 
             <option value="{$foo}" selected="selected">{$foo} </option>                      
          {else}    
             <option value="{$foo}" {if $foo eq 'City'} selected="selected"{/if}>
                 {$foo} 
            </option> 
          {/if} 
        {/foreach}    
    </select>                        
   <select name="cboMaterial" id="cboMaterial">
     <option value="">Material</option>
     <option value="CT">Cotton</option>
     <option value="SL">Silk</option>
   </select>                    
    <input name="btnSearch" type="button" value="Search" id="btnSearch" onclick="searchitem()"/>

3 个答案:

答案 0 :(得分:1)

当您执行window.location时,您正在重定向页面,这是一个GET请求而不是POST。

您需要将额外变量添加到查询字符串,例如

window.location.href =“http://www.legacy.com/womens-tops-”+ strCity +“。php?something = blah”;

然后在PHP中调用某些东西。

另一种更简单的方法是使用jQuery(或者如果您愿意使用纯JavaScript)来更改表单的操作,以便路径是您的“womens-tops- $ strCity”,然后提交表单。

var strCity = document.getElementById('cboCityNameRes').value;
var frm = document.getElementById('frmSearchTops')
frm.action = "/womens-tops-" + strCity + ".php";
frm.submit();

或jQuery

var strCity = $('#cboCityNameRes').val();
$("#frmSearchTops").attr("action", "/womens-tops-" + strCity + ".php");
$("#frmSearchTops").submit();

虽然搜索引擎机器人根本不会运行任何JavaScript。所以这并不是真的为你做任何事情与SEO。至少从我的例子中可以看出。你可能有其他理由这样做,但答案仍然存在。

答案 1 :(得分:0)

你有一个选择onchange事件调用函数cityChanged但你只发布了函数searchitem

尽管如此,您可以传递为选择选择的值:

<select  name="cboCityNameRes" id="cboCityNameRes" onchange="cityChanged(this.value)">
...
</select>

然后使用函数参数的值,例如:

function cityChanged(city){
    var material = document.getElementById("cboMaterial").options[document.getElementById("cboMaterial").selectedIndex].value;
    // window.location.href = "http://www.legacy.com/womens-tops-"+city+".php"
    // add material to the URL somewhere?
}

答案 2 :(得分:0)

试试这个

function cityChanged(val) {
var value = val.options[val.selectedIndex].value;  
window.location.href = "http://www.legacy.com/womens-tops-"+value+".php";
}

并且您的HTML应该是这样的,

<select  name="cboCityNameRes" id="cboCityNameRes" onchange="cityChanged(this)">

希望这对你有用