2012-06-14 2 views
1

Все мои действия «постов» распознаются как «get». Я пробовал все, что знаю, чтобы исправить это, но все, кажется, в порядке. Отправка формы возвращает «GET» каждый раз.django признает «сообщение» как «get»

urls.py

from django.conf.urls.defaults import * 
urlpatterns = patterns('', 
url(r'^buildit/$', 'main.apps.builder.views.main'), 
) 

views.py

from django.http import HttpResponse 

def main(request): 
    return HttpResponse(request.method) 

HTML форма

<form id="myform"> 
<input type="checkbox" name="list" value="audio"/> Audio<br /> 
<input type="checkbox" name="list" value="video"/> Video<br /> 
<input type="submit" value="Get Custom Library!" /> 
</form> 

JQuery

$(document).ready(function() { 

$("#myform").submit(function() { 



    serialize = $(this).serialize() 

    $.ajax({ 
    type: 'POST', 
    url: '/django/builder/buildit', 
    data: serialize, 
    crossDomain: false, 
    success: function(response){ 
     alert(response); 
    } 
}); 

    return false; 

    $(document).ajaxSend(function(event, xhr, settings) { 
function getCookie(name) { 
    var cookieValue = null; 
    if (document.cookie && document.cookie != '') { 
     var cookies = document.cookie.split(';'); 
     for (var i = 0; i < cookies.length; i++) { 
      var cookie = jQuery.trim(cookies[i]); 
      // Does this cookie string begin with the name we want? 
      if (cookie.substring(0, name.length + 1) == (name + '=')) { 
       cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
       break; 
      } 
     } 
    } 
    return cookieValue; 
} 
function sameOrigin(url) { 
    // url could be relative or scheme relative or absolute 
    var host = document.location.host; // host + port 
    var protocol = document.location.protocol; 
    var sr_origin = '//' + host; 
    var origin = protocol + sr_origin; 
    // Allow absolute or scheme relative URLs to same origin 
    return (url == origin || url.slice(0, origin.length + 1) == origin + '/') || 
     (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') || 
     // or any other URL that isn't scheme relative or absolute i.e relative. 
     !(/^(\/\/|http:|https:).*/.test(url)); 
} 
function safeMethod(method) { 
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
} 

if (!safeMethod(settings.type) && sameOrigin(settings.url)) { 
    xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); 
} 
}); 

}); 
}); 
+0

Вы можете попробовать вывести содержимое 'request.method', а не просто« not post »; вероятно, это поможет в вашей отладке. – Amber

+0

Выстрел в темноте: вы попробовали добавить 'method =" сообщение "в вашу html-форму? – Hannele

+0

@ Ханнеле это не имело бы значения. Функция ajax явно определяет метод. – Ohgodwhy

ответ

2

Теперь я не эксперт по Django здесь ... но похоже, что Django переопределит любые запросы, если есть проблема с Append_Slash. Он перенаправит запрос с помощью косой черты, добавленной в конце, в этот момент он потеряет любую информацию POST и вернет метод GET. Может быть, попробуйте положить/в конец/django/builder/buildit? Выстрел в темноте ... (Казалось бы, это имеет значение только в том случае, если APPEND_SLASH = false ...)

2

может также положить его в виде

<form id="myform" method="post"> 

Это трудно читать JavaScript, который странно отступом. Но почему код после return false; не закрывает обратный вызов submit?

+0

Нет причин. он явно определил метод POST в ajax. – Ohgodwhy

+0

все еще плохая форма. Было бы неплохо, если бы он работал без javascript. Кроме того, я бы поспорил, что submit начнет POSTing с этим изменением из-за некоторой другой ошибки. –

+0

Я верю, что «return false»; заключается в том, чтобы остановить форму от фактического представления. @Ohgodwhy не имеет значения, определяют ли они POST в ajax, если форма фактически подает, то ajax отменяется, и все это бессмысленно.«return false»; необходимо делать то, что хочет OP. – Ian

Смежные вопросы