首页 > 解决方案 > Ajax 有时有效,有时无效。为什么会这样?

问题描述

我已经看到了很多类似的问题,但我还没有找到任何明确的解决方案来克服这个问题。

我在 pythonanywhere 上托管了 django rest api,并将该 api 调用到具有以下 Ajax 代码的 HTML 模板。

        <script type="text/javascript">
            $('.sodmzs').click(function(){
                var directory = $("#directory").val();
                var name = $("#name").val();
                var mailing_name = $("#mailing_name").val();
                var address = $("#address").val();

                $.ajax({
                    url : "https://nexerp.pythonanywhere.com/api/create_student",
                    type : "POST",
                    dataType : "json",
                    data : {directory: directory, name : name, mailing_name: mailing_name, address: address}
                })
                .done(function(response){
                    console.log("success");
                })
                .fail(function(){
                    console.log("fail");
                })
                .always(function(){
                    console.log("always");
                })
            });
        </script>

我认为这将是 CORS 问题,所以我在 settings.py 中进行了以下更改,

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

INSTALLED_APPS = [
    ....
    'corsheaders',
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ''... ]

以及在views.py中创建函数的样子,

@api_view(['POST',])
def student_create(request):
    account = User.objects.get(pk=1)
    print(account)
    studentobject = Student(author=account)
    if request.method == "POST":
        serializer = StudentSerializer(studentobject, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status = status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我在models.py中的代码,

class Student(models.Model):
    student_id = models.AutoField(primary_key=True)
    directory = models.CharField(max_length=200)
    name = models.CharField(max_length=200)
    mailing_name = models.CharField(max_length=200)
    address = models.CharField(max_length=200)

和我在 serializer.py 中的代码,

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = ('student_id','directory','name','mailing_name','address')

我真的不知道为什么它不起作用!在 10 次中,它只工作 1 或 2 次。请让我知道我在哪里错了。谢谢。

标签: jquerypython-3.xajaxdjango-rest-frameworkxmlhttprequest

解决方案


推荐阅读