Rumah  >  Artikel  >  rangka kerja php  >  Analisis sebab dan penyelesaian pelaporan ralat borang penyerahan thinkPHP5

Analisis sebab dan penyelesaian pelaporan ralat borang penyerahan thinkPHP5

PHPz
PHPzasal
2023-04-11 16:10:531065semak imbas

ThinkPHP5 ialah rangka kerja aplikasi web sumber terbuka berdasarkan PHP Konsep reka bentuknya mudah, intuitif dan fleksibel. Walau bagaimanapun, anda mungkin menghadapi beberapa masalah dan ralat semasa membangunkan menggunakan rangka kerja ThinkPHP5. Antaranya, kesilapan menghantar borang adalah antara masalah biasa. Artikel ini akan memperkenalkan sebab dan penyelesaian untuk ralat dalam borang penyerahan ThinkPHP5.

1. Punca ralat

Dalam ThinkPHP5, anda boleh menggunakan kaedah pos untuk menyerahkan data borang, atau anda boleh menggunakan kaedah lain seperti letak dan padam. Walau bagaimanapun, apabila menyerahkan data borang, mesej ralat kadangkala muncul: "Kaedah HTTP ini tidak dibenarkan untuk diserahkan", seperti yang ditunjukkan dalam rajah di bawah.

Sebab mesej ralat ini ialah penyemak imbas menggunakan mekanisme prasemak yang dipanggil "OPTIONS". Apabila menyerahkan data menggunakan kaedah permintaan bukan mudah seperti POST dan PUT, penyemak imbas akan menghantar permintaan OPTIONS terlebih dahulu untuk menentukan sama ada pelayan menyokong kaedah permintaan ini. Jika pelayan tidak menyokongnya, mesej ralat di atas akan muncul.

2. Penyelesaian

  1. Dayakan sokongan merentas domain

Mula-mula faham apa itu merentas domain. Cross-domain merujuk kepada melaksanakan kod JavaScript satu nama domain pada halaman web nama domain lain. Tegasnya, selagi protokol, nama domain dan port adalah berbeza, ia akan dianggap sebagai domain yang berbeza dan masalah merentas domain akan berlaku. Apabila menyerahkan data borang, ralat di atas mungkin berlaku disebabkan isu merentas domain.

Penyelesaiannya adalah untuk mendayakan sokongan merentas domain di bahagian pelayan. Dalam ThinkPHP5, anda boleh menambah kod berikut pada fail konfigurasi config.php:

// 开启跨域支持
'cross_domain'   => [
    'allow_origin' => ['*'],
    'allow_methods' => ['POST','GET','OPTIONS','PUT','DELETE'],
    'allow_headers' => ['*'],
    'expose_headers'=> ['token'],
    'max_age'       => 3600,
    'allow_credentials' => true,
],

Antaranya, parameter allow_origin menentukan nama domain yang dibenarkan dan menunjukkan bahawa semua nama domain dibenarkan. Parameter allow_methods menentukan kaedah permintaan yang dibenarkan Kaedah permintaan bukan mudah seperti PUT dan DELETE juga perlu ditambah. Parameter allow_headers menentukan maklumat pengepala permintaan yang dibenarkan dan bermaksud menerima sebarang pengepala permintaan. Parameter expose_headers menentukan maklumat tambahan yang dibenarkan untuk diperoleh oleh pengguna, dan token menunjukkan bahawa maklumat token dibenarkan untuk diperoleh. Parameter max_age menentukan masa yang dibenarkan untuk caching, dalam saat. Parameter allow_credentials menunjukkan bahawa bukti kelayakan identiti seperti kuki dibenarkan untuk digunakan.

  1. Tukar kaedah permintaan

Jika anda tidak mahu mendayakan sokongan merentas domain, anda juga boleh menyelesaikan masalah dengan menukar kaedah permintaan. Apabila menyerahkan data borang, anda boleh menukar kaedah permintaan kepada POST, untuk mengelakkan masalah pra-semakan penyemak imbas.

Dalam HTML, anda boleh mengubah suai atribut kaedah borang seperti ini:

<form method="POST">

Dalam JavaScript, anda boleh mengubah suai atribut jenis permintaan ajax seperti ini:

$.ajax({
    type: 'POST',
    url: 'http://example.com/path/to/api',
    data: postData,
    success: function(data) {
        console.log(data);
    }
});
  1. Ubah suai konfigurasi nginx

Jika ralat di atas berlaku semasa menggunakan Nginx sebagai pelayan web, anda boleh menambah konfigurasi berikut pada fail nginx.conf:

location / {
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,token';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;
        return 204;
    }
    ...
}

Antaranya, Access -Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers, Access-Control-Max-Age dan parameter lain mempunyai maksud yang sama seperti yang dijelaskan di atas.

Ringkasan

Ralat semasa menyerahkan data borang adalah masalah biasa, yang mungkin sukar diselesaikan oleh pemula. Artikel ini memperkenalkan sebab dan penyelesaian untuk ralat dalam menyerahkan borang, dengan harapan dapat membantu pembaca menggunakan rangka kerja ThinkPHP5 dengan lebih baik.

Atas ialah kandungan terperinci Analisis sebab dan penyelesaian pelaporan ralat borang penyerahan thinkPHP5. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn