0

我正在使用 jQuery 为 Django 发送 ajax 请求。要选择响应模板,我正在检查这样的请求:

def about(request) :
    context = {'content' : 'about.html',
               'section_nav' : 'about_nav.html'}

    if request.is_ajax() :
        context['ajax'] = True

    return render_to_response('main.html', context)

在 main.html 我检查是否是 ajax 并扩展一个不同的模板。jQuery很简单:

$.get('/about/', function(data) {
        $('.article').html(data);
});

在 Chrome 和 Firefox 中它工作得很好......但 IE9 在 request.is_ajax() 中返回 False 并使用错误的上下文加载页面。我怎样才能克服这个问题,并从 IE(使用 jQuery)发出 ajax 请求并用 django 识别它?

4

2 回答 2

2

尝试使用$.ajax而不是$.get. 我读过 using$.ajax适用于所有浏览器,但$.get不会使用 IE 发送 ajax 标头。

还将缓存选项设置为 false。

于 2012-07-31T19:02:53.380 回答
0

在发出 jQuery ajax 请求时,我发现至少有一个版本的 IE 没有为 django 的请求方法 is_ajax() 发送适当的标头来工作——带有字符串“XMLHttpRequest”的 HTTP_X_REQUESTED_WITH 标头

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.is_ajax

要解决此问题,请在 jQuery $.ajax 调用中手动添加标头,即 $.ajax({'headers': {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'},...});

于 2013-01-30T21:06:05.680 回答