【问题标题】:referrer URL not being grabbed correctly未正确抓取引荐来源网址
【发布时间】:2015-05-19 18:34:32
【问题描述】:

我正在尝试提取引荐来源网址,对其应用正则表达式,并将结果用作文本字段中的值。问题是当前的实现没有将引荐来源网址拉到文本字段中,这将来自单击上一页上的链接,而是允许我输入一个值。它应该使用引用者自动填充文本字段并允许用户基于它进行搜索(或者手动搜索,如果他们之前没有点击过链接)。控制台为$("#imageid").val(encodeID[1]); 行输出Uncaught TypeError: Cannot read property '1' of null,因为它试图在结果字符串的数组中查找第二个值(这意味着没有被拉取的引荐来源网址)。不知道我的逻辑有什么问题

案例 1

使用此逻辑,它确实会拉取引荐来源网址,但不允许用户手动搜索(没有引荐来源网址预先填充搜索字段)

var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 1) {
    $("#imageid").val(encodeID[1]);
} else {
    var regexp = /assets\/(\d+)/;
    var encodeID = regexp.exec(window.document.referrer);
    $("#imageid").val(encodeID[1]);
}

案例 2

加上额外的 if 语句,它不会拉出引荐来源网址,但允许用户手动搜索

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]);
    }

用户需要能够点击引荐来源网址并使其预填充字段,或手动搜索。

【问题讨论】:

  • 附注一下,没有必要重新分配regexpencodeID,因为它们首先是在if 语句之外分配的。
  • 我知道,只是更专注于这个烦人的小逻辑问题。
  • 看来正则表达式不匹配。将console.log(encodeID); 放在var encodeID = regexp.exec(window.document.referrer); 下方,看看console.log 中的输出是什么
  • 不确定“手动搜索”是什么意思。现在.referrer 只能在用户单击页面链接时被拉出,而不是在他们手动输入 URL 时。不过,我不确定它是否来自表单帖子...有人检查我...如果您试图从搜索请求中找到推荐人,您可能会在搜索表单中包含一个隐藏字段使用 POST/GET 发送“推荐人”值。
  • @micahblu,正则表达式工作正常。当我在控制台中运行var regexp = /assets\/(\d+)/; var encodeID = regexp.exec(window.document.referrer); console.log(encodeID); 时,我得到了我需要的值。

标签: javascript jquery referrer


【解决方案1】:

您遇到了问题,因为数组的索引从 0 开始,而不是 1。

if (encodeID !== null && encodeID.length == 1) {
    $("#imageid").val(encodeID[1]);
}

如果 encodeID 的长度为 1,则它只有一个元素,即 encodeID[0],但您尝试将值设置为等于 encodeID[1],如果数组的长度为1.

【讨论】:

  • if (encodeID) {...}if (encodeID) {...} 会更好吗?
  • 我知道它们从 0 开始。数组总是会在正则表达式之后通过 assets/number, number。我需要能够提取第二个 number 的值。
  • @Matt 是的,但你的逻辑是错误的。您正在测试length == 1.. 如果您的正则表达式匹配,您将拥有一个长度为 2 而不是长度为 1 的数组。
  • 那么这应该可以工作: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]); }
  • 只需将length 设置为2。感谢@BrianGlaz!
【解决方案2】:

所以解决办法是把数组长度设置为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]);
}

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2011-07-15
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多