django recognizing "post" as "get"

All my "post" actions are being recognized as "get" I have tried everything I know to fix this but everything seems to be in order. Submitting the form returns "GET" every time.

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

<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'));
}
});

});
});

Answers


Now I'm no expert on Django here...but it seems like Django will override any requests if there is an Append_Slash issue. It will redirect the request with the slash appended at the end, at this point, it will lose any POST information and will return the GET method. Maybe try putting a / at the end of /django/builder/buildit? Shot in the dark... (Would seem this only matters if APPEND_SLASH = false...)


might as well put it in your form

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

It's hard to read the javascript that is strangely indented. But, why is there code after return false; without closing the submit callback?


Need Your Help

HTML/Rails form only submits on reload

jquery html ruby-on-rails forms

I have a rails form to create up to 25 new objects (essays in this app) at once using a custom controller. I've written some simple jquery that hides forms 2-25 until a user clicks the button to "...