javascript - AJAX 数据被发送到错误的 Django View

标签 javascript python ajax django

我是 django 和 ajax 的新手,所以我一直在做一个项目来学习它。我有两个按钮,一个用于添加标记,一个用于删除标记。

这里是views.py

@csrf_exempt
def save(request):
    searchVar = request.POST.getlist('search[]')
    waypoint = Waypoint()
    waypoint.name = searchVar[0]
    waypoint.geometry = ('POINT(' + searchVar[2] + " " + searchVar[1] + ')')
    waypoint.save()
    return HttpResponse(json.dumps(dict(isOk=1)), content_type='application/json')

@csrf_exempt
def remove(request):
    objectID = request.POST.get('id')
    point = get_object_or_404(Point, pk = objectID)
    point.delete()

这是 urls.py

from django.conf.urls import patterns, url, include

urlpatterns = patterns('googlemaps.waypoints.views',
    url(r'^$', 'index', name='waypoints-index'),
    url(r'', 'save', name='waypoints-save'),
    url(r'', 'remove', name='waypoints-remove'),
)

这是js文件中的ajax

    $('#saveWaypoints').click(function () {
    var searchList = [search.name, search.geometry.location.lat(), search.geometry.location.lng()]
    $.ajax({
      url : "waypoints-save",
      type : "POST",
      data : { search : searchList }
    }, function (data) {
        if (data.isOk) {
            $('#saveWaypoints');
        } else {
            alert(data.message);
        }
    });
});
$('#removeWaypoints').click(function () {
  console.log(markerID);
    $.ajax({
      url : "waypoints-remove",
      type : "POST",
      data : { id : markerID }
    }, function (data) {
        if (data.isOk) {
            $('#removeWaypoints');
        } else {
            alert(data.message);
        }
    });
});

保存按钮工作正常,但是当我点击删除按钮时,我在控制台日志中收到此错误

POST http://127.0.0.1:8000/waypoints-remove 500 (Internal Server Error)

IndexError at /waypoints-remove
list index out of range

Request Method: POST
Request URL: http://127.0.0.1:8000/waypoints-remove

在我的服务器 cmd 中出现这个错误

Internal Server Error: /waypoints-remove
Traceback (most recent call last):
  File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\core\handlers\base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\core\handlers\base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\views\decorators\csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\rnvitter\virtualenv4\googlemaps\googlemaps\waypoints\views.py", line 23, in save
    waypoint.name = searchVar[0]
IndexError: list index out of range
2017-01-09 22:40:11,781 - ERROR - Internal Server Error: /waypoints-remove
Traceback (most recent call last):
  File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\core\handlers\base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\core\handlers\base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\views\decorators\csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\rnvitter\virtualenv4\googlemaps\googlemaps\waypoints\views.py", line 23, in save
    waypoint.name = searchVar[0]
IndexError: list index out of range

这让我相信来自删除按钮 ajax 调用的数据正在发送到我的保存 View ,有人知道吗?

最佳答案

您的 urls.py 文件设置错误。第一个参数是匹配 URL 的正则表达式,因此 ^$ 将匹配根路径。 name 参数用于获取特定 View 的 URL,例如当您使用 reverse 函数时。

^表示行首,$表示行尾。在一起,中间没有任何东西,它将匹配一个空行。

要匹配另一个 URL,例如 /waypoints-save/,您需要编写另一个正则表达式:^/waypoints-save/$。这将匹配行的开头,后跟字符 /waypoints-save/,然后是行尾。要正确设置整个 urls.py,它应该如下所示:

from django.conf.urls import patterns, url, include

urlpatterns = patterns('googlemaps.waypoints.views',
    url(r'^$', 'index', name='waypoints-index'),
    url(r'^/waypoints-save/$', 'save', name='waypoints-save'),
    url(r'^/waypoints-remove/$', 'remove', name='waypoints-remove'),
)

关于javascript - AJAX 数据被发送到错误的 Django View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560855/

相关文章:

python - 如何查看 Django 调试工具栏?

jquery - 想要阻止页面重新加载/离开直到 Ajax 请求完成

asp.net - 对 ASP.NET 页面方法的 Ajax GET 请求?

javascript - 防止对象缩放

javascript - 当 Safari 正在运行并且没有窗口时,如何通过 JavaScript Automation 打开 Safari 的新窗口?

c# - 通过 IronPython 在 C# 中使用 NLTK

java - 在 PrimeFaces 中使用 Ajax 事件时重置 Bean

javascript - 如何让 Node.js 在我的服务器上运行?

javascript - "Uncaught Error: Too many re-renders. React limits the number of renders to prevent an infinite loop."

python - 使用索引列表从字典中获取值