在Django中执行Ajax代码时出现类型错误

时间:2018-09-26 00:22:10

标签: python jquery ajax django

我正在使用jquery ajax将json数据导入我的网页(Django框架)。我似乎无法呈现json数据(我的第一步只是做一个console.log(data)-不起作用)。我得到的是“未知”类型,因此我认为这可能是部分或全部问题。在我的简单模板中,我有一个无法进行Ajax调用的按钮。下面的代码包括我的urls.py文件,具有相关功能的views.py文件以及我网站上的ajax代码。 firefox开发人员页面上的网络选项卡上显示代码200,我认为这意味着我的urls.py和views.py是正确的,但是请告诉我这是否正确。我的应用程序在pythonanywhere上。我正在使用console.log来检查ajax调用是否可以调出json数据。它没。我的JavaScript触发了错误代码-不确定乳清。感谢您提供的任何帮助。

urls.py(请参阅最后一个网址):

app_name = 'beach'

urlpatterns = [
    url(r'^$', views.index,name='index'),  #when you go to the beach directory, it looks at this urls.py file, this says go to views.py in this folder, index function
    url(r'^(?P<lakes>[a].*)/$', views.searched, name='lakes'),  #regex = starts with a letter then it can be anything
    url(r'^(?P<gnisid>[0-9]+)/$', views.gnis, name='GNIS'),  #regex = numbers ony, many.  name-'GNIS' a link to the HTTPResponseRedirect or directly from the template from a link
    url(r'^(?P<tmap>tmap)/$', views.tmap, name='tmap'),
    url(r'^(?P<profile>profile)/$', views.profile, name='profile'),
    url(r'^(?P<ajax>profiles/default)/$', views.defaultajax, name='ajaxgnis')   
]

views.py

def defaultajax(request, ajaxgnis):
    x = {"foo": "bar"}
    jsondata = json.dumps(x)
    return HttpResponse(jsondata, content_type='application/json')

带有javascript代码的模板(经过大量测试,很抱歉)

window.onload = function () {

    $('#putprofile').click(makeProfile);

    function makeProfile(){
        $.ajax({
                url: "/beach/profile/default/",
                dataType: "json",

                error: function(jqXHR, textStatus, errorThrown) {
                    alert('An error occurred... Look at the console (F12 or Ctrl+Shift+I, Console tab) for more information!');

                    $('#result').html('<p>status code: '+jqXHR.status+'</p><p>errorThrown: ' + errorThrown + '</p><p>jqXHR.responseText:</p><div>'+jqXHR.responseText + '</div>');
                    console.log('jqXHR:');
                    console.log(jqXHR);
                    console.log('textStatus:');
                    console.log(textStatus);
                    console.log('errorThrown:');
                    console.log(errorThrown);
                    console.log('datatype:');
                    console.log(typeof data);
                },

                success: function(data, textStatus, jqXHR) {
                    alert('Load was performed. Look at the console (F12 or Ctrl+Shift+I, Console tab) for more information! ');
                    console.log('jqXHR:');
                    console.log(jqXHR);
                    console.log('textStatus:');
                    console.log(textStatus);
                    console.log('data:');
                    console.log(data);
                }
            });

    }
}

1 个答案:

答案 0 :(得分:1)

我发现了我的问题:

(1)我有一个名为profile的现有URL,而我最初的ajax调用是/ profile / default,我认为这导致urls.py中的URL出现了一些问题。我将模板中的ajax调用网址更改为/beach/profiles/default,beach是我的应用名称。我的urls.py文件中的最终URL为:url(r'^(?P<defaultajax>profiles/default)/$', views.defaultajax, name='ajaxgnis'). Note again that the "/" in / beach / proiles / default`是至关重要的,因为如果没有“ /”,则该URL将从根目录“ beach”开始。

(2)我的命名组中有一个错误,与我的视图中的变量不匹配。

(3)我没有通过在pythonanywhere的Web选项卡中“重新加载”应用程序而引起混乱。