我的页面上有以下javascript应该生成并转到网址而不是发布表单:
var tokenList = ["auto", "usate"];
var dirList = [];
function makeUrl(prov, manuf, model, price){
if (_addToken(prov)){
_joinTokens();
}
if (_addToken(manuf)){
_addToken(model);
_joinTokens();
}
if (price){
return _joinDirs() + "?prezzo=" + price;
}
return _joinDirs();
}
function _addToken(tok){
if (tok){
tokenList.push(tok.replace(/ /g,"_"));
return true;
}
return false;
}
function _joinTokens(){
dirList.push(tokenList.join('-'));
tokenList = [];
}
function _joinDirs(){
if (tokenList){
_joinTokens();
}
var url = '/' + dirList.join('/');
if (url.charAt(url.length-1) == '/'){
url = url.slice(0, -1);
}
return url;
}
由此代码触发:
$(document).ready(function(){
$('#navForm').submit(function() {
var prov = $("[name=select-provincia]").val();
var manuf = $("[name=select-marca]").val();
var model = $("[name=select-modello]").val();
var price = $("[name=select-prezzo]").val();
var url = makeUrl(prov, manuf, model, price);
window.location = url;
return false;
});
});
自从我从原来的python中翻译这段代码以来,已经有很长一段时间了。偶尔我的服务器日志中出现了罕见的错误,显示用户试图访问看起来几乎像两个网址连接的奇怪网址。我无法复制这样的错误,但我最好的猜测是我的javascript正在发生一些事情。最后两次我收到此错误我注意到用户使用的是firefox 3.6和iphone。这可能是某种浏览器不兼容吗?我的javascript有什么问题吗?错误只是在userland中吗?
这里有一个错误的网址示例:
/auto-usate-pesaro_e_urbino/fiat-500//rimini/fiat-500?prezzo=13000
和两个可能正确的:
/auto-usate-pesaro_e_urbino/fiat-500?prezzo=13000
/auto-usate-rimini/fiat-500?prezzo=13000
对于优化代码的任何不相关的建议都是受欢迎的,因为我对此很不满意。
答案 0 :(得分:1)
不确定是不是这样,但我认为这些奇怪的网址可能是将生成的网址附加到正在查看的网页的网址的结果。您只生成URL的路径名部分,不包括协议和主机名(http://foo.com
) - 有些浏览器可能会将此路径解释为相对于当前路径。尝试使用协议和主机名预先添加URL。
您可能还希望看到以下答案:Setting JavaScript window.location并按照建议将网址写入window.location.href
。