【问题标题】:Why is my JavaScript search function redirecting to "http://localhost:8090/?"?为什么我的 JavaScript 搜索功能会重定向到“http://localhost:8090/?”?
【发布时间】:2019-04-10 16:43:33
【问题描述】:

我正在创建一个网络服务器,目前托管在http://localhost:8090 上。它由一个 HTML 文件、一个 server.js 和一个 client.js 文件组成。我已经成功地在客户端和服务器之间建立了完美的通信以满足我的需要。我的问题在于,当我点击我的搜索按钮时,一切都执行得很好,除了出于某种原因它将页面重定向到'http://localhost:8090/?'当我需要它保持在“http://localhost:8090/”上以动态更新 HTML 时。

我进行了广泛的搜索,没有发现与我的问题相似的内容。我发现了这个问题https://stackoverflow.com/a/2647601/5264986,但是每次页面想要转到不同的地址时都会弹出一个对话框,这不是我需要的。我已经浏览了所有代码,并且没有指向该位置的重定向或 href。我已将其范围缩小到 client.js 中的这个函数:

function search(){

    var search = document.getElementById('txt_field').value; 

    fetch('/search', {
        headers: {text: search}
    })
        .then(response => response.json())
        .then(function(data) {

            // CODE HERE TO DYNAMICALLY UPDATE HTML

        })
        .catch(error => console.error(error));

}

在我的服务器中,为此发生的一切是:

app.get('/search', function(req, res){

    var text = req.get('text');
    var url = 'https://api.spotify.com/v1/search?q=name:'+text+'&type=track';
    var content = httpGet(url);
    res.send(content);

});

其中 httpGet 是一个 xmlhttprequest。

编辑

这是搜索按钮的 html:

<button id="send_btn" class="btn btn-outline-secondary my-2 my-sm-0"><img src="./images/search.png" width="30"></button>

在 client.js 中,这是触发它的原因:

document.getElementById('send_btn').onclick = search;

编辑结束

它将内容很好地发送回客户端,但由于某种原因,它随后重定向到:8090/?它重新加载 html 文件并覆盖动态 html。 任何指向正确方向的指针将不胜感激。

【问题讨论】:

  • 您尚未共享 HTML,因此我们无法全面了解正在发生的事情。但是,看起来很像您的搜索按钮通过 GET 提交表单并且您没有阻止默认行为?
  • 注意httpGet是异步的
  • Sorey @RobinZigmond 我现在添加它

标签: javascript html redirect server client


【解决方案1】:

preventDefault 添加到您的事件处理程序。我假设当你点击按钮时函数search 被调用。如果是这样,那么您需要传递如下事件:

function search(evt){
  evt.preventDefault(); // <--
  var search = document.getElementById('txt_field').value; 

  fetch('/search', {
    headers: {text: search}
  })
    .then(response => response.json())
    .then(function(data) {

      // CODE HERE TO DYNAMICALLY UPDATE HTML

     })
     .catch(error => console.error(error));
}

preventDefault 会告诉浏览器不要执行按钮的默认动作,即提交表单。

所以preventDefault 让浏览器知道您不希望它提交表单,从而防止发生重定向。

【讨论】:

  • 非常感谢! preventDefault 修复了它,是的,对不起,我意识到我一开始没有包含 HTML,但后来编辑了原始问题并添加了它和 search() 触发器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2012-12-11
  • 2020-08-13
  • 2015-12-19
  • 2015-08-04
  • 2021-11-05
  • 2018-01-21
相关资源
最近更新 更多