2017-04-10 73 views
0

向另一个URL发出AJAX GET请求后,从中调用的原始URL也会附加GET查询。对另一个URL的AJAX GET请求使用GET查询追加原始URL

$.ajax({ 
      type: "GET", 
      url: "/ajax/search", 
      data: {query: data}, 
      dataType: "json",     
      success: function (a) {       
        console.log(a); 
      } 
}); 

但是,经过JsonResponse:

有了下面的代码,数据AJAX请求= 'a' 是成功的URL

localhost:8000/ajax/search?query=a 

下面是我的AJAX请求的代码制作已成功收到(我已确认),从中发出AJAX请求的原始页面的URL附加有GET数据。我如何防止获取请求被附加到原始URL?

下面是来自Django的服务器日志数据:

"GET /username/ HTTP/1.1" 200 2947 
"GET /ajax/search?query=a HTTP/1.1" 200 96 
"GET /username/?query=a HTTP/1.1" 200 2947 

我想Ajax响应后,我的网址是/用户名/

+0

什么是从那里你正在Ajax调用原来的网址是什么? –

+0

使用:'url:“http //:sitename/ajax/search” –

+0

@SijanBhandari服务器日志中的第一行(URL)来自我在进行AJAX调用的地方。第二行是我打电话给的URL。第三个URL应该与第一个URL相同,但是由于某种原因,来自该调用的查询参数也被附加在此处。 –

回答

1

我希望有一些功能,同时点击您的网页上的一些按钮。在这种情况下, event.preventDefault();

$("#form").submit(function(event) { 

    event.preventDefault(); <------ 
    $.ajax({ 
     type: "GET", 
     url: "/ajax/search", 
     data: {query: data}, 
     dataType: "json",     
     success: function (a) {       
       console.log(a); 
     } 
}); 

});

+0

似乎与这个问题没有任何关系:*“如何防止将获取请求附加到原始URL”* –

+0

event.preventDefault()方法停止发生元素的默认操作。在你的情况下,默认的操作是提交搜索。因为你想覆盖它并进行ajax调用。 –

+0

是的,但问题不是它提交两次,问题是该网址有错误的网址。 –

0

你可以使用这个jQuery脚本删除从任何查询参数url

$(document).ready(function(){ 
    if (window.location.href.indexOf('?') > -1) { 
     history.pushState('', document.title, window.location.pathname); 
    } 
}); 
0

使用window.history.pushStatehttps://developer.mozilla.org/en-US/docs/Web/API/History_API#Example_of_pushState()_method

$.ajax({ 
      type: "GET", 
      url: "/ajax/search", 
      data: {query: data}, 
      dataType: "json",     
      success: function (a) {       
       console.log(a); 
       if (window.location.href.indexOf('?') > -1) { # removes the params in URL if exists 
       window.history.pushState({}, document.title, window.location.pathname); # this is the magic 
       } 
      } 
}); 
+0

这与我的回答有何不同? –

+0

但是为什么GET参数首先被添加?它通常应该返回到原始URL。 –

+0

@NikosVitaTopiko你在document.ready上使用它,不知道为什么要这样做,在动作对我更有意义之后调用'pushState'。 – rrmerugu