Javascript 未正确抓取引用人URL
我试图拉取引用URL,对其应用正则表达式,并将结果用作文本字段中的值。问题是,当前的实现并没有将referer URL拉入textfield,这将来自于单击上一页上的链接,而是允许我输入一个值。它应该自动用推荐人填充文本字段,并允许用户基于该字段进行搜索(或者手动搜索,如果他们以前没有单击链接)。控制台输出Javascript 未正确抓取引用人URL,javascript,jquery,referrer,Javascript,Jquery,Referrer,我试图拉取引用URL,对其应用正则表达式,并将结果用作文本字段中的值。问题是,当前的实现并没有将referer URL拉入textfield,这将来自于单击上一页上的链接,而是允许我输入一个值。它应该自动用推荐人填充文本字段,并允许用户基于该字段进行搜索(或者手动搜索,如果他们以前没有单击链接)。控制台输出uncaughttypeerror:无法读取行$(“#imageid”).val(encodeID[1])的null属性“1”,因为它试图在结果字符串的数组中找到第二个值(这意味着没有提取引用
uncaughttypeerror:无法读取行$(“#imageid”).val(encodeID[1])的null属性“1”代码>,因为它试图在结果字符串的数组中找到第二个值(这意味着没有提取引用URL)。不确定我的逻辑有什么问题
案例1
使用此逻辑,它确实会拉取推荐人URL,但不允许用户手动搜索(没有推荐人预先填充搜索字段)
案例2
加上
if语句,它不会提取引用者URL,但允许用户手动搜索
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 1){
$("#imageid").val(encodeID[1]);
}else if($("#imageid").val() !== ''){
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
$("#imageid").val(encodeID[1]);
}
用户需要能够单击引用人URL并使其预先填充字段,或者手动搜索。您遇到了一个问题,因为数组的索引从0开始,而不是从1开始
if (encodeID !== null && encodeID.length == 1) {
$("#imageid").val(encodeID[1]);
}
如果encodeID
的长度为1,则它只有一个元素,即encodeID[0]
,但您试图将该值设置为encodeID[1]
,如果数组的长度为1,该值将永远不存在。因此解决方案是将数组长度设置为2:
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 2){
$("#imageid").val(encodeID[1]);
}else if($("#imageid").val() !== ''){
$("#imageid").val(encodeID[1]);
}
简单地说,没有必要重新分配regexp
和encodeID
,因为它们第一次是在if
语句之外分配的。我知道,只是更关注这个恼人的小逻辑问题。似乎regex不匹配。放置console.log(encodeID)代码>下面var encodeID=regexp.exec(window.document.referer)
并查看控制台中的输出。log不确定“手动搜索”是什么意思。现在,.referer
只能在用户单击指向该页面的链接时拉取,而不是在用户手动键入URL时拉取。但是我不确定,如果它是从一个表单帖子中出来的。。。有人来查一下。。。如果您正试图从搜索请求中查找推荐人,您可能会在搜索表单中包含一个隐藏字段,该字段将发送一个带有POST/GET的“推荐人”值。@micahblu,正则表达式工作正常。当我运行var regexp=/assets\/(\d+)/;var encodeID=regexp.exec(window.document.referer);console.log(encodeID)在控制台中,我得到了我需要的值。关于这一点,更好的if语句是if(encodeID){…}
?我知道它们从0开始。数组总是在正则表达式后面,作为assets/number,number
。我需要能够提取第二个数字
@Matt的值,是的,但是您的逻辑被破坏了。您正在测试length==1
。。如果您的正则表达式匹配,您将有一个长度为2的数组,而不是长度为1的数组;var encodeID=regexp.exec(window.document.referer);if(encodeID!==null&&encodeID.length==2){$(“#imageid”).val(encodeID[1])}else if($(“#imageid”).val()!=''{$(“#imageid”).val(encodeID[1])}
只需将长度设置为2即可。谢谢@BrianGlaz!
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 2){
$("#imageid").val(encodeID[1]);
}else if($("#imageid").val() !== ''){
$("#imageid").val(encodeID[1]);
}