【问题标题】:ajax complete event: match url with regexajax 完成事件:将 url 与正则表达式匹配
【发布时间】:2020-02-10 09:42:56
【问题描述】:

我正在尝试在某个 ajax 请求完成后运行一个函数。 由于整个站点有多个请求,因此我将使用settings.url 过滤我想要的请求,就像在官方文档中一样:

$( document ).ajaxComplete(function( event, xhr, settings ) {
  if ( settings.url === "ajax/test.html" ) {
    $( ".log" ).text( "Triggered ajaxComplete handler. The result is " +
      xhr.responseText );
  }
});

实际的url 看起来像这样https://example.com/page?ids=%2C1%2C2%2C ?ids= 之后的所有内容都随着请求的变化而变化。

现在,上面的代码只有在 settings.url 与请求中的完全相同时才会触发,包括 id。

if ( settings.url === "https://example.com/page?ids=%2C1%2C2%2C" )

所以我需要将settings.urlhttps://example.com/page?ids= 和最后的通配符匹配,因为id 并不重要。

这可以通过使用正则表达式来实现吗?

【问题讨论】:

  • if ( settings.url.indexOf("https://example.com/page?ids") === 0) ...
  • 正则表达式是匹配字符串中模式的常规方法。为什么不可能?当你尝试时发生了什么?如果它不起作用,您可能只是犯了一个错误(请记住,您必须在正则表达式中转义 /?)。如果您需要帮助,您需要发布您的尝试。

标签: javascript jquery regex ajax url


【解决方案1】:

如果你想用正则表达式来做,你可以用正则表达式来解析一个 URL (What is a good regular expression to match a URL?) 并用你的分隔符完成它,在你的情况下是 =。

(www|http:|https:)+[^\s]+[\w]=

【讨论】:

    【解决方案2】:
    let regex = /[^ ]*pageids=[^ ]*/;
    
    if (settings.url.match(regex)) {
      console.log('triggered');
      console.log(settings.url);
    }
    

    它现在正在工作。我忘了用settings.url.match() 替换settings.url===

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-10
      • 2019-03-07
      • 2015-05-30
      • 2020-06-06
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多