Jquery 多个请求发送到服务器500后(内部服务器错误)

Jquery 多个请求发送到服务器500后(内部服务器错误),jquery,ajax,django,Jquery,Ajax,Django,我正在开发Django应用程序,其中我希望使用ajax创建多个到Django服务器的异步请求。如果异步请求少于5个,但如果有更多的请求,django会为其中一些请求返回500个内部服务器错误,那么它可以正常工作。如果我发出同步ajax请求,它就可以正常工作 发送多个ajax请求的代码: for (i=2; i <= lastIndex; i++){ pidForm['page_index'] = i; $.ajax({ type: 'POST',

我正在开发Django应用程序,其中我希望使用ajax创建多个到Django服务器的异步请求。如果异步请求少于5个,但如果有更多的请求,django会为其中一些请求返回500个内部服务器错误,那么它可以正常工作。如果我发出同步ajax请求,它就可以正常工作

发送多个ajax请求的代码:

for (i=2; i <= lastIndex; i++){
    pidForm['page_index'] = i;
    $.ajax({
        type: 'POST',
        url: '{% url "search_by_pid" %}',
        data: pidForm,
        success: function (data) {
            console.log(data);
            $(data.api_response.bugs).each(function(index, bugs){
                var id = bugs.id;
                createInnerHtml(id);
            });
        }
    })
}

你知道我该如何解决这个问题或者我做错了什么吗?

你的问题不在于你的ajax请求。从您提供的跟踪中,我可以看到您正在对django视图中的另一个服务/url进行另一个API调用,并且您的代码正在中断

  File "api_calls.py", line 33, in bug_api_call_by_pid
    return json.loads(r.content)
通过对远程服务进行如此多的调用,您可能正在使用该服务,或者远程服务限制了您的速率,并且没有发送回有效的JSON

您可以通过以下两种方法之一相当简单地解决此问题:

在json编码之前检查服务的响应,以确保接收到有效的json。 在您的服务中应用一些您自己的速率限制,或者设置channelssockets并将响应以非同步方式流式传输回来,这样您就可以同步发出每个请求。
我希望这有帮助

错误跟踪是什么?这是在您的本地机器上,即使用runserver还是在生产机器上,即nginx/apache+uwsgi/gunicorn?我目前在本地机器上使用django development server@dirkgrotenI将其添加到我的问题中@dirkgrotenas您可以看到错误发生在api_calls.py第33行中的一行。向我们展示代码或print r,看看为什么apparentlyr.content是非。如果我同步发送请求,效果很好,当我异步发送5个以上的请求时就会出现问题。我认为Django无法处理所有的请求,因此其中一些请求会在api调用中丢弃,Django不会传递任何请求。如果我同步发送请求,效果很好,但当我异步发送5个以上的请求时,问题就会出现。我认为Django不能处理所有的请求,所以其中一些请求会被丢弃,Django在api调用中不会传递任何请求。不要说它工作得很好。您自己的代码api_calls.py会抛出错误,因此无法正确处理错误。是的,可能是快速顺序中的多个请求触发了该问题,但是如果您进行了正确的错误处理,您可以很容易地解决该问题。您可以将错误返回到ajax,在ajax中,它可以重试任何失败的请求。
Internal Server Error: /pid/
Traceback (most recent call last):
  File "C:\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\views.py", line 26, in get_bug_by_pid
    api_response = api_call.bug_api_call_by_pid(product_id, page_index)
  File "api_calls.py", line 33, in bug_api_call_by_pid
    return json.loads(r.content)
  File "C:\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
  File "api_calls.py", line 33, in bug_api_call_by_pid
    return json.loads(r.content)
    if response.status_code == 200:

    return response.json()