通过AJAX向Django发送的Javascript帖子根本不起作用,已经没有什么想法了
大家好,我们只是想把一个javascript字符串变量发布到django视图中。听起来很简单,但我已经三天没试过了!我几乎已经阅读了所有关于堆栈溢出的相关问题,我只是不知道我做错了什么 模板HTML页面上的JAVASCRIPT通过AJAX向Django发送的Javascript帖子根本不起作用,已经没有什么想法了,javascript,ajax,django,post,Javascript,Ajax,Django,Post,大家好,我们只是想把一个javascript字符串变量发布到django视图中。听起来很简单,但我已经三天没试过了!我几乎已经阅读了所有关于堆栈溢出的相关问题,我只是不知道我做错了什么 模板HTML页面上的JAVASCRIPT <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script> <!--also have a jquery file imported further up in
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
<!--also have a jquery file imported further up in my code -
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
should be where it is getting ajax from, right?-->
<script language="JavaScript">
$(function() {
$( "#sortable" ).sortable();
$( "#sortable" ).disableSelection();
});
$(document).ready(function() {
$('#makeconstruct').submit(function()
{
//Serializes the sortable's item id's into an array of string
var senderStrIndexArray = $('#sortable').sortable();
var linkOrder = $(senderStrIndexArray).sortable('toArray');
alert(linkOrder);
$.ajax({
type: "POST",
url: "/ecosystem/ajaxmes/",
// The key needs to match your method's input parameter (case-sensitive).
data: JSON.stringify({ linkOrder:linkOrder }),
contentType: "application/json; charset=utf-8",
dataType: "json",
//do we need json??
success: function(data){alert(data);},
failure: function(errMsg) {
alert(errMsg);
}
});
});
});
</script>
url.PY
url(r'^ecosystem/ajaxmes', 'container.views.ajaxmes'),
#Think this is the only line I need to show here
javascript linkOrder变量的警报起作用,但是我们得到的只是“不,我要哭了”的响应。我们现在真的很绝望,提前感谢您的帮助。尝试将此
url(r'^economy/ajaxmes',container.views.ajaxmes')
更改为此url(r'^economy/ajaxmes/,'container.views.ajaxmes'),
您正在将请求发送到“/economy/ajaxmes/”,但由于在url.py中没有尾随斜杠,因此请求将被重定向。您的Javascript
提交功能没有返回false。这意味着Ajax被触发,但在它有机会做任何事情之前,按钮的默认动作会发生,表单会正常提交,这就是is_Ajax函数返回false的原因。如果JS返回false,则不会触发该操作。hi,我们这样做了,然后它告诉我们在HTML中的表单操作中添加斜杠,我们这样做了。然后又回到了第1步,我们刚刚看到了“不,我要哭了”的页面。看起来,$.ajax位从未被访问过,因为我们可以完全更改它,并且什么也没有发生,相反,表单本身似乎直接调用视图\Hi,我们尝试将return false添加到每个位置,并添加到右括号之前,即:submit.(function(){CODE;return false;}),然后我们得到了警报(linkOrder)但是这一页就转到了我们上过的那一页。我们还从表单HTML中删除了method=“POST”和action=“/ecosystem/ajaxmes/”位,因为这是不需要的(可能是?@bioinformagician将事件传递给您的submit(function(event))…
并作为回调函数event.preventDefault()的第一行代码>并返回报告。您好,谢谢您的回复,如果我按照我认为您要求的做了,警报就会出现,一旦您单击“确定”,其他任何事情都不会发生,它也不会更改页面或重新加载当前页面。@bioinformagician但这正是您想要的,不是吗?使用Ajax的全部目的是避免重新加载页面,但是您也没有编写任何JS来实际更改当前页面。好的,谢谢,这就是脚本的问题所在!event.preventDefault()与csrf stuff的一些斗争结合使用,必须在$.ajax调用的数据部分包含csrfmiddlewaretoken:{{csrf_token}}。
from django.utils import simplejson #not sure this is necessary given the code
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def ajaxmes(request):
if request.is_ajax():
message = "Yes, I am the king!!!"
else:
message = "No, I am going to cry!!"
return HttpResponse(message)
url(r'^ecosystem/ajaxmes', 'container.views.ajaxmes'),
#Think this is the only line I need to show here