Was soll ich tun, wenn PHP $_post Axios nicht akzeptieren kann?

PHPz
Freigeben: 2023-04-24 13:55:13
Original
948 Leute haben es durchsucht

Mit der Popularität der Front-End- und Back-End-Trennung verwenden immer mehr Entwickler Front-End-Frameworks wie Vue und React und verwenden Axios als Tool für das Front-End, um Anfragen an das Back-End zu senden. Manchmal stoßen wir jedoch auf eine Situation: Wenn wir Axios zum Senden einer POST-Anfrage verwenden, kann das Backend die Daten nicht korrekt empfangen. Dies hängt mit der Axios-Konfigurationsmethode zusammen, die wir im Frontend verwenden.

In diesem Artikel wird eine mögliche Situation vorgestellt: Wenn Axios zum Senden einer POST-Anfrage verwendet wird, kann das Backend die Daten nicht korrekt empfangen. Gleichzeitig stellen wir einen Workaround zur Verfügung, eine Lösung, die den Lesern helfen soll, mit ähnlichen Situationen besser zurechtzukommen.

Problembeschreibung
Wenn wir Vue+axios zum Entwickeln von Projekten verwenden, verwenden wir normalerweise axios.post(), um eine POST-Anfrage zu senden. Diese POST-Anfrage enthält die Daten, die wir senden müssen. Das spezifische Codebeispiel lautet wie folgt: axios.post()发送一个POST请求,这个POST请求携带了我们所需要发送的数据。具体代码示例如下:

axios.post('/api/submit', {
    name: '张三',
    age: 25
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});
Nach dem Login kopieren

而在后端,则会用$_POST来接收这个请求中所携带的数据。示例如下:

$name = $_POST['name'];
$age = $_POST['age'];
Nach dem Login kopieren

然而,当我们发送POST请求时,后端却无法正确地接收到数据。

问题原因
造成这种问题的原因在于,axios发送POST请求时默认使用application/json格式来传递数据,而后端使用$_POST来接收数据时,需要数据以application/x-www-form-urlencoded格式传递才能正确接收。如果数据格式不同,后端就会无法正确解析这些数据。

解决方案
为了解决这个问题,我们需要对axios发送请求时的默认请求头进行修改,使之变为application/x-www-form-urlencoded,具体方法如下:

  1. 在axios的请求拦截器中添加配置,将请求头的Content-Type设置为application/x-www-form-urlencoded。
axios.interceptors.request.use(config => {
    if (config.method === 'post') {
        config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
    }
    return config;
});
Nach dem Login kopieren
  1. 将axios.post()方法中的data参数进行URL编码。
axios.post('/api/submit', qs.stringify({
    name: '张三',
    age: 25
}))
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});
Nach dem Login kopieren

修改后的代码示例如下:

axios.interceptors.request.use(config => {
    if (config.method === 'post') {
        config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
    }
    return config;
});

axios.post('/api/submit', qs.stringify({
    name: '张三',
    age: 25
}))
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});
Nach dem Login kopieren

经过上述操作后,我们就可以正确地向后端发送POST请求,并成功接收到数据了。

总结
在使用axios发送POST请求时,后端无法正确接收到数据的情况,通常是由于axios发送请求时默认使用application/json格式来传递数据,而后端使用$_POST来接收数据时,需要数据以application/x-www-form-urlencoded格式传递才能正确解析。为了解决这个问题,我们需要对axios的请求拦截器进行配置,将请求头中的Content-Type设置为application/x-www-form-urlencodedrrreee

Im Backend wird $_POST verwendet, um die in dieser Anfrage enthaltenen Daten zu empfangen. Ein Beispiel ist wie folgt: 🎜rrreee🎜 Wenn wir jedoch eine POST-Anfrage senden, kann das Backend die Daten nicht korrekt empfangen. 🎜🎜Ursache des Problems🎜Der Grund für dieses Problem ist, dass Axios standardmäßig das application/json-Format verwendet, um Daten beim Senden einer POST-Anfrage zu übertragen, während das Backend $_POST verwendet code> zum Empfangen von Daten. Wenn die Daten im Format <code>application/x-www-form-urlencoded übergeben werden müssen, um sie korrekt zu empfangen. Wenn das Datenformat unterschiedlich ist, kann das Backend die Daten nicht korrekt analysieren. 🎜🎜Lösung🎜Um dieses Problem zu lösen, müssen wir den Standard-Anfrageheader ändern, wenn Axios eine Anfrage sendet, sodass er zu application/x-www-form-urlencoded wird. Die spezifische Methode lautet wie folgt folgt: 🎜
  1. Konfiguration im Axios-Request-Interceptor hinzufügen und den Content-Type des Request-Headers auf application/x-www-form-urlencoded setzen.
rrreee
  1. URL kodiert den Datenparameter in der axios.post()-Methode.
rrreee🎜Das geänderte Codebeispiel lautet wie folgt: 🎜rrreee🎜Nach den oben genannten Vorgängen können wir die POST-Anfrage korrekt an das Backend senden und die Daten erfolgreich empfangen. 🎜🎜Zusammenfassung🎜Wenn Axios zum Senden einer POST-Anfrage verwendet wird, kann das Backend die Daten nicht korrekt empfangen. Dies liegt normalerweise daran, dass Axios beim Senden einer Anfrage standardmäßig das Format application/json verwendet Das Backend verwendet $_POST zum Empfangen von Daten verwendet wird, müssen die Daten im Format application/x-www-form-urlencoded übergeben werden, um korrekt analysiert zu werden. Um dieses Problem zu lösen, müssen wir den Axios-Request-Interceptor konfigurieren, den Content-Type im Request-Header auf application/x-www-form-urlencoded setzen und axios.post() festlegen Der Datenparameter in der Methode ist URL-codiert. 🎜

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHP $_post Axios nicht akzeptieren kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage