💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ احسان زارع شریف
مشکل در ارسال فرم
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۲۸ تیر ۱۴۰۳

این کد‌های من داخل فایل جاوا اسکریپت هست اما نمیدونم چرا فرم ارسال نمیشه 

let j = jQuery.noConflict();


 

j(document).ready(function() {

    j('form').on('submit' , (e) => {

        e.preventDefault();

        let nameInput = j('#nameInput').val();

        let emailInput = j('#emailInput').val();

        let telInput = j('#telInput').val();

        let csrf = j(this).data('csrf');


 

        j.ajax({

            url : '../../public/index.php',

            type: 'POST',

            data : {

                action: 'userLogin',

                name: nameInput,

                email: emailInput,

                phone: telInput,

                csrf: csrf

            },

            beforeSend: function(){

                j('#form_submit').text('در حال انجام');

            },

            success: function (response){},

            error: function (error){

                alert(' شما با شکست روبه رو شدید ');

            },

            complete: function(){

                j('#form_submit').text('ارسال شد')

            }

        })

    })

})

با سلام 

مشکل باید به صورت کلی‌تری بررسی بشه ولی چیزی که من از نگاه کردن به کدتون متوجه میشم یک اشتباه در csrf هست
عبارت j(this).data('csrf') در اینجا اشتباه است، چون this به فرم اشاره نمی‌کند، بلکه به تابع ناشناس داخل on('submit') اشاره می‌کند.

برای رفع این مشکل، شما باید از فرم به عنوان context استفاده کنید.

let j = jQuery.noConflict();
j(document).ready(function() {
    j('form').on('submit', function(e) {
        e.preventDefault();
        let nameInput = j('#nameInput').val();
        let emailInput = j('#emailInput').val();
        let telInput = j('#telInput').val();
        // تغییر این خط برای استفاده از فرم به عنوان context
        let csrf = j(this).data('csrf');
        j.ajax({
            url: '../../public/index.php',
            type: 'POST',
            data: {
                action: 'userLogin',
                name: nameInput,
                email: emailInput,
                phone: telInput,
                csrf: csrf
            },
            beforeSend: function() {
                j('#form_submit').text('در حال انجام');
            },
            success: function(response) {},
            error: function(error) {
                alert(' شما با شکست روبه رو شدید ');
            },
            complete: function() {
                j('#form_submit').text('ارسال شد');
            }
        });
    });
});
بهنام مرادی ۲۹ تیر ۱۴۰۳، ۱۳:۴۳

باز هم با وضعیت 405 ارسال میشه همه نکات رو رعایت کردم

احسان زارع شریف ۲۹ تیر ۱۴۰۳، ۱۳:۴۶

من وقتی با متد get ارسال مبکنم فرم ارسال میشه ولی جوابی که میده به جای اینکه اون عملکرد را ازش انتظار داشته باشم تنها خود اون کد را میبینم در تب response   

احسان زارع شریف ۲۹ تیر ۱۴۰۳، ۱۳:۵۰

خطای 405 (Method Not Allowed) به این معناست که متد HTTP استفاده شده (در اینجا POST) برای URL مورد نظر مجاز نیست.
داخل فایل سمت سرور حتما بررسی کنید که متود پست مجاز باشد

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // پردازش درخواست POST
    $action = $_POST['action'];
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $csrf = $_POST['csrf'];
    // بررسی و اعتبارسنجی داده‌ها
    // ...
    // پاسخ دادن به کلاینت
    echo json_encode(['status' => 'success']);
} else {
    // اگر متد POST نبود، خطای 405 برگردان
    http_response_code(405);
    echo json_encode(['error' => 'Method Not Allowed']);
}
?>
بهنام مرادی ۲۹ تیر ۱۴۰۳، ۱۳:۵۱

کد‌ها را ست کردم در فایلی که ادرس دهی دادم به url ولی باز وضعیت ۴۰۵ میده  

احسان زارع شریف ۲۹ تیر ۱۴۰۳، ۱۴:۱۲

سلام مجدد 

چند مورد زیر رو انجام بدید ببینید مشکلتون حل میشه

 

بررسی مسیر و متد‌ها در سرور

اطمینان حاصل کنید که فایل index.php به درستی تنظیم شده و درخواست‌های POST را قبول می‌کند. حتما بررسی کنید که درخواست شما به فایل مد نظر شما می‌رسد یا خیر - این مورد را با دامپ اطلاعات تست کنید.

 

تنظیمات .htaccess برای پذیرش متدهای POST

در صورتی که از Apache استفاده می‌کنید، ممکن است نیاز به تنظیمات .htaccess باشد:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

 

بررسی توکن CSRF

مطمئن شوید که توکن CSRF به درستی ارسال و در سرور تأیید می‌شود.

بهنام مرادی ۳۰ تیر ۱۴۰۳، ۱۵:۴۲