HTTP_X_REQUESTED_WITH 未在 ajax 调用 jquery 中设置
HTTP_X_REQUESTED_WITH not set in ajax call with jquery
我正在使用 Django 开发一个新网站,但我遇到了 ajax 请求的问题。我一直在谷歌搜索并阅读了很多帖子和文章(其中大多数解释相同)。
问题:执行了 ajax 调用并且我在视图中收到了请求,但是 request.is_ajax() returns 错误。据我所知,request.is_ajax() 检查 HTTP_X_REQUESTED_WITH header 的值,但我在请求 header 中看不到它,因此我无法检查is_ajax() 在我看来。
HTML形式:
<form id="search-form" method="get" action="/search/">
<input type="text" id="search" name="search" placeholder="Search">
<button id="btn-search" >SEARCH</button>
</form>
Javascript:
$('#search-form').submit(function(e) {
e.preventDefault();
$.ajax({
url : $('#search-form').attr('action'),
type:'GET',
data : {
'search' : $('#search').val()
},
success: function(data, e) {
alert("SUCCESS")
},
error: function(data) {
alert("ERROR");
},
});
})
我的看法:
def search(request):
if request.is_ajax():
print "SOMETHING"
if request.GET:
import requests
url = API_END_POINT + '&name=Bruce+Springsteen'
response = requests.get(url).json()
return HttpResponse(json.dumps(response), content_type='application/json')
return render(request, 'core/search.html')
这是我在 Chrome 网络选项卡中看到的:
General
Remote Address:127.0.0.1:8000
Request URL:http://localhost:8000/search/?search=Bruce+Springsteen
Request Method:GET
Status Code:200 OK
Response Headers
Content-Type:application/json
Date:Sat, 06 Jun 2015 10:18:51 GMT
Server:WSGIServer/0.1 Python/2.7.6
X-Frame-Options:SAMEORIGIN
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:es-ES,es;q=0.8,en;q=0.6
Connection:keep-alive
Cookie:djdt=hide; messages="73ba7b40cd0a4a7e0812a0350babd2d1dd268820$[[\"__json_message\"404254\"You have signed out.\"]]"; csrftoken=TXImtQ3inUdCCOLUbEvoU9Hc8ddqpUlV
Host:localhost:8000
Referer:http://localhost:8000/search/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
Query String Parameters
search:Bruce Springsteen
有什么想法吗?我将不胜感激任何建议,因为我在这个(可能是愚蠢的)错误上花费了太多时间。
提前致谢。
我要回答我自己的问题。问题出在 jquery .ajax() 方法上。我不知道为什么但是这个方法没有将 X-Requested-With 设置为 XMLHttpRequest,Django 需要它来检查请求是否是 ajax 请求。我什至尝试使用我之前评论中指定的方式添加 header(headers: { 'X-Requested-With': 'XMLHttpRequest' }
和 beforeSend: function(xhr) { xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); },
)。相反,我使用 .get() 方法,我猜默认情况下设置这个 header 并且它有效。
我正在使用 Django 开发一个新网站,但我遇到了 ajax 请求的问题。我一直在谷歌搜索并阅读了很多帖子和文章(其中大多数解释相同)。
问题:执行了 ajax 调用并且我在视图中收到了请求,但是 request.is_ajax() returns 错误。据我所知,request.is_ajax() 检查 HTTP_X_REQUESTED_WITH header 的值,但我在请求 header 中看不到它,因此我无法检查is_ajax() 在我看来。
HTML形式:
<form id="search-form" method="get" action="/search/">
<input type="text" id="search" name="search" placeholder="Search">
<button id="btn-search" >SEARCH</button>
</form>
Javascript:
$('#search-form').submit(function(e) {
e.preventDefault();
$.ajax({
url : $('#search-form').attr('action'),
type:'GET',
data : {
'search' : $('#search').val()
},
success: function(data, e) {
alert("SUCCESS")
},
error: function(data) {
alert("ERROR");
},
});
})
我的看法:
def search(request):
if request.is_ajax():
print "SOMETHING"
if request.GET:
import requests
url = API_END_POINT + '&name=Bruce+Springsteen'
response = requests.get(url).json()
return HttpResponse(json.dumps(response), content_type='application/json')
return render(request, 'core/search.html')
这是我在 Chrome 网络选项卡中看到的:
General
Remote Address:127.0.0.1:8000
Request URL:http://localhost:8000/search/?search=Bruce+Springsteen
Request Method:GET
Status Code:200 OK
Response Headers
Content-Type:application/json
Date:Sat, 06 Jun 2015 10:18:51 GMT
Server:WSGIServer/0.1 Python/2.7.6
X-Frame-Options:SAMEORIGIN
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:es-ES,es;q=0.8,en;q=0.6
Connection:keep-alive
Cookie:djdt=hide; messages="73ba7b40cd0a4a7e0812a0350babd2d1dd268820$[[\"__json_message\"404254\"You have signed out.\"]]"; csrftoken=TXImtQ3inUdCCOLUbEvoU9Hc8ddqpUlV
Host:localhost:8000
Referer:http://localhost:8000/search/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
Query String Parameters
search:Bruce Springsteen
有什么想法吗?我将不胜感激任何建议,因为我在这个(可能是愚蠢的)错误上花费了太多时间。
提前致谢。
我要回答我自己的问题。问题出在 jquery .ajax() 方法上。我不知道为什么但是这个方法没有将 X-Requested-With 设置为 XMLHttpRequest,Django 需要它来检查请求是否是 ajax 请求。我什至尝试使用我之前评论中指定的方式添加 header(headers: { 'X-Requested-With': 'XMLHttpRequest' }
和 beforeSend: function(xhr) { xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); },
)。相反,我使用 .get() 方法,我猜默认情况下设置这个 header 并且它有效。