7

基本的に、django でhttp://www.w3schools.com/jquery/jquery_ajax_get_post.aspに似たものが必要です。サンプルをダウンロードし、localhost + php を使用してローカルでテストしましたが、問題なく動作しますが、例がどれほど単純であっても、django で動作させることができないようです。これは基本的に、上記のリンクの例に基づいて、わずかな変更を加えて行ったことです

JavaScript:

<script type="text/javascript">
$(document).ready(function(){
  $("#my_form").submit(function(){
    $.post("",
    {name:"Donald Duck",
     city:"Duckburg"},
    function(data,status){
      alert("Data: " + data + "\nStatus: " + status);
    })
    .fail(function() { alert("error"); });
    return false;
  });
});
</script>

URL:

url(r'^ajax/$', views.ajax_test, name="ajax"),

ビュー:

def ajax_test(request):
    if request.method == 'POST' and request.is_ajax():
        name = request.POST['name']
        city = request.POST['city']
        message = name + ' lives in ' + city

        return HttpResponse(json.dumps({'message': message})) #tried without the json. Doesn't work either

    return render(request, 'books/ajaxTest.html')

html:

<form id="my_form" action="" method="post" {% if form.is_multipart %}enctype="multipart/form-data"{% endif %}>{% csrf_token %}
<input type="submit" value="Send">
</form>

フォームにはdjangoフォームが含まれていると思われますが、基本的なことすらできないので、それはちょっと無意味です。誰かがcsrf_tokenタグについて言及しましたが、それを削除しても問題は解決しません。上記の例の出力は、基本的に alert('error') のみを生成し、他には何も生成しません。私は非常に多くの例を経験してきましたが、最も基本的なものを機能させることさえできません

4

2 に答える 2

5

この例を確認してください:このリンクを確認してください

モデル

class Color(models.Model):
    color = models.CharField(max_length=256)

class Auto(models.Model):
    type = models.CharField('auto type', max_length=256)
    colors = models.ManyToManyField(Color) 

from django import forms
from models import Color, Auto

    class AutoForm(forms.Form):
        TYPE_CHOICES = [('', '-- choose a type --'), ] + [(t.type, t.type) for t in Auto.objects.all()]
        COLOR_CHOICES = [(c.color, c.color) for c in Color.objects.all()]
        COLOR_CHOICES.insert(0, ('', '-- choose a vehicle type first --'))

        type = forms.ChoiceField(choices=TYPE_CHOICES, widget=forms.Select(attrs={'onchange':'get_vehicle_color();'}))
        color = forms.ChoiceField(choices=COLOR_CHOICES)
    [Check this article][2] can be helpful

テンプレート

{% extends "base.html" %}
{% block head %}
<script type="text/javascript" src="/site_media/prototype.js"></script>
<script type="text/javascript" src="/site_media/my_ajax_function.js"></script>
{% endblock %}

{% block content %}
    {% if form_was_valid %}
        {# ... show whatever... #}
    {% else %}
        <form action="/auto/reserve/" method="POST">
        <ul>
        {{ form.as_ul}}
        <li><label for="submit">&nbsp;</label>
        <input type="submit" id="submit" name="submit" value="Submit"/></li>
        </ul>
        </form>
    {% endif %}
{% endblock %}

Javascript

function get_vehicle_color(){
    new Ajax.Request('/auto/ajax_purpose_staff/', { 
    method: 'post',
    parameters: $H({'type':$('id_type').getValue()}),
    onSuccess: function(transport) {
        var e = $('id_color')
        if(transport.responseText)
            e.update(transport.responseText)
    }
    }); // end new Ajax.Request
}

URL.py

urlpatterns = patterns('mysite.auto.views',
    (r'^ajax_color_request/$', 'ajax_color_request'),
    # ... everything else...
)


def ajax_color_request(request):
    # Expect an auto 'type' to be passed in via Ajax and POST
    if request.is_ajax() and request.method == 'POST
        auto_type = Auto.objects.filter(type=request.POST.get('type', ''))
        colors = auto_type.colors.all() # get all the colors for this type of auto.
    return render_to_response('auto/ajax_color_request.html', locals())

{% for c in colors %}
    <option value="{{ c.color }}">{{ c.color|title }}</option>
{% endfor %}
于 2013-05-29T12:59:27.313 に答える