0

我有以下输入:

<input id="country_name" type"text" />
<input id="country_id" type"text" />

country_name我想影响与我用onchange插入输入的国家相对应的id 。所以我使用这个 ajax 函数:

$("#country_name").change({
    $.ajax({
        url: "/country/getid/",
        method: 'GET',
        datatype: "json",
        data: {'country_name': $("#country_name").val()},
        success: function(response) {   
            $("#country_id").val() = response.country_id;
        }
    });
});

而我的观点是这样的(链接到同一个网址urls.py

def get_country_id(country_name_get):
    countries = Countries.objects.filter(country_name=country_name_get)
    if countries.exists():
        for country in countries:
            country_id = country.country_id
    else:
        country_id = ''
return country_id 

在我的 urls.py 中,我添加了这一行:

url(r'^/country/getid/$', 'des.services.get_country_id', name='get_country_id'),

我用谷歌浏览器检查了这个元素,然后我看到了这个错误:

Uncaught SyntaxError: Unexpected token .

你知道错误来自哪里吗?

我仍然没有得到任何country_id输入。我的代码有问题还是有其他解决方案?

4

3 回答 3

3

您的视图不返回HttpResponse. 此外,您应该返回您country_id的 JSON 数据。假设每个国家/地区名称只能在您的数据库中出现一次,您for在视图中的循环没有任何意义,因为您只检索查询集中country_id的最后一个country_name。此外,您应该始终将您的 Django 模型命名为单数,而不是复数,也就是说,Country而不是Countries.

我会重写你的 AJAX 函数和你的视图,如下所示:

$("#country_name").change({
    $.ajax({
        type: 'GET',
        dataType: 'json',
        url: "/country/getid/",
        data: {'country_name': $("#country_name").val()},
        success: function(response) {   
            $("#country_id").val() = response.country_id;
        }
    });
});

风景:

import json
from django.http import HttpResponse

def get_country_id(request):
    country_name = request.GET['country_name']
    response = {}

    try:
        country = Countries.objects.get(country_name=country_name)
        response['country_id'] = country.country_id
    except Countries.DoesNotExist:
        response['country_id'] = ''

    return HttpResponse(json.dumps(response), mimetype='application/json') 
于 2013-04-08T12:04:22.790 回答
1

视图必须返回一个 HttpResponse。如果您愿意,该响应的内容可以是一个简单的 ID,但它仍然必须包含在响应中。

return HttpResponse(country_id)

如果您查看控制台或浏览器中的开发人员工具,您会看到视图返回 500 错误。浏览器工具也会向您显示错误回溯本身,这正是我上面所说的。

于 2013-04-08T11:47:16.940 回答
1

您在 ajax 中的 url 必须有一个 app_name。我不知道您的应用程序的确切名称是什么,所以我放入app_name了我的示例。只需将其更改为正确的即可。

$("#country_name").change({
    $.ajax({
        type: "GET",
        url: "/app_name/country/getid/",
        data: {'country_name': $("#country_name").val()},
        contentType: "application/json;charset=utf-8",
        dataType: "json",
        success: function(data) {   
            $("#country_id").val() = data;
        }
    });
});

你必须通过请求,而不是country_name_get

def get_country_id(request):
    country_name = request.GET['country_name']

    try:
        country = Countries.objects.get(country_name=country_name)
        country_id = country.id
    except Countries.DoesNotExist:
        country_id = ''

    return HttpResponse(country_id) 

在您的网址中,我因此而怀疑des.services.get_country_id,它必须是

 urlpatterns = patterns('app_name.views',
      url(r'^country/getid/$', 'get_country_id', name='get_country_id'),
 )  

或者

 urlpatterns = patterns('',
      url(r'^country/getid/$', 'app_name.views.get_country_id', name='get_country_id'),
 )

取决于你如何定义它

于 2013-04-08T14:51:49.517 回答