Skip to main content
 首页 » 编程设计

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

2025年05月04日42虾米哥

我是 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'), 
)