1

我所有的“发布”操作都被识别为“获取”我已经尝试了我所知道的一切来解决这个问题,但一切似乎都井井有条。每次提交表单都会返回“GET”。

网址.py

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

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

});
});
4

2 回答 2

2

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...)

于 2012-06-14T04:10:07.187 回答
2

不妨把它放在你的表格中

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

奇怪缩进的 javascript 很难阅读。return false;但是,为什么在没有关闭提交回调的情况下还有代码呢?

于 2012-06-14T03:33:16.007 回答