Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Post-Anfrage in der WeChat-Applet-Entwicklung
In diesem Artikel geht es um die Post-Anfrage bei der Entwicklung des WeChat-Applets. Wenn Sie nichts über die Post-Anfrage bei der Entwicklung des WeChat-Applets wissen oder sich für die Post-Anfrage bei der Entwicklung von interessieren WeChat-Applet, dann schauen wir uns diesen Artikel gemeinsam an. Kommen wir ohne weitere Umschweife zur Sache!
wx.request(OBJECT)
wx.request
initiiert ist eine HTTPS-Anfrage. Ein WeChat-Applet kann nur 5 Netzwerkanforderungsverbindungen gleichzeitig haben.
Offizielle Website-Beschreibung
|
Typ | Erforderlich | Beschreibung th > | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
url | String | Ist | Adresse der Entwicklerserverschnittstelle | ||||||||||||||||||||||||||||||||
Daten | Objekt, String | Nein | Angeforderte Parameter | ||||||||||||||||||||||||||||||||
Header | Objekt | Nein | Request-Referer festlegen | ||||||||||||||||||||||||||||||||
Methode | String | kann nicht im Headerfestgelegt werden Nein | Standard ist GET, gültige Werte: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT | ||||||||||||||||||||||||||||||||
Erfolg | Funktion | Nein | Die Rückruffunktion wurde vom Entwicklerdienst erfolgreich zurückgegeben, res = {data: 'Inhalt zurückgegeben vom Entwicklerserver'} | ||||||||||||||||||||||||||||||||
fail | Function | Nein | Rückruffunktion für fehlgeschlagenen Schnittstellenaufruf | ||||||||||||||||||||||||||||||||
abgeschlossen td> | Funktion | Nein | Die Rückruffunktion am Ende des Schnittstellenaufrufs (erfolgreicher Aufruf, fehlgeschlagener Aufruf wird ausgeführt) |
WeChat-Applet-Beispiel
wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { 'content-type': 'application/json' }, success: function(res) { console.log(res.data) } })
Diese Methode zum Anfordern von GET ist in Ordnung und der Header muss nicht hinzugefügt werden.
Aber POST hat ein großes Problem.
Ich verwende den folgenden Code zum Debuggen (Code 1):
wx.request({ url: ApiHost + '/?service=default.getOrderInfo', data: { 'order_id': order_id }, method: 'POST', success: function (res) { // console.log(res); if (res.data.ret == 200) { //something to do } else{ //something to do } } fail: function (res) { console.log(res); } });
Achten Sie auf das Bild unten, die Eingabeaufforderung im WeChat-Entwicklungstool:
Die POST-Anfrage fügt den Wert der Daten in die Anforderungsnutzlast anstelle der Abfragezeichenfolgenparameter ein. Wenn der Backend-Server nicht darauf achtet, wird dies nicht der Fall sein in der Lage sein, die Daten zu erhalten.
Es gibt viele Modifikationen im Internet, wie diese. ----Header hinzufügen
wx.request({ url: ApiHost + '/?service=default.getOrderInfo', data: { //数据urlencode方式编码,变量间用&连接,再post 'order_id='+order_id }, method: 'POST', header:{ 'content-type':'application/x-www-form-urlencoded' }, success: function (res) { // console.log(res); if (res.data.ret == 200) { //something to do } else{ //something to do } } fail: function (res) { console.log(res); } });
Wenn Sie es so ändern, benötigt das Backend keine spezielle Verarbeitung.
Aber...
Da ich immer noch die Standardmethode verwenden möchte, besteht die einzige Möglichkeit darin, den Backend-Server zu ändern.
Ich verwende hier das Phalapi-Framework, ich empfehle es~~~
if(DI()->request->getHeader('content-type')) { $contentType = DI()->request->getHeader('content-type'); } if(!empty($contentType)&&(strtolower(@$contentType) === 'application/json')) { $HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : "{}"; DI()->request = new PhalApi_Request(array_merge($_GET,json_decode($HTTP_RAW_POST_DATA, true))); }
Schließlich habe ich das Debugging mit Code 1 auf dem PC bestanden. Verwenden Sie Standardanfragen und nicht den application/x-www-form-urlencoded-Modus.
Aber...wenn ich eine echte Maschine zum Debuggen verwende, warum kann ich dann den Anforderungsparameter nicht erneut erhalten? Seltsame Dinge. . . . . . . . .
Schließlich durch Paketerfassungsanalyse
Echtes Maschinenterminal
POST /?service=default.getOrderInfo HTTP/1.0 Host: proxy Connection: close Content-Length: 43 Content-Type: application/json Accept-Encoding: gzip, deflate Accept: */* User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 MicroMessenger/6.5.1 NetType/WIFI Language/zh_CN Referer: https://servicewechat.com/###/0/page-frame.html Accept-Language: zh-cn {"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}
PC-Simulationsentwicklungsterminal
POST /?service=default.getOrderInfo HTTP/1.0 Host: proxy Connection: close Content-Length: 43 Origin: http://###.appservice.open.weixin.qq.com X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 appservice webview/100000 content-type: application/json Accept: */* Referer: https://servicewechat.com/####/devtools/page-frame.html Accept-Encoding: gzip, deflate, br {"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}
Endlich den Unterschied gefunden:
Content-Type und content-type
Simulator Der Standardwert ist Content-Type
Der Standardwert für echte Geräte ist Content-Type
Der Back-End-Server fügt die Verarbeitung von Content-Type hinzu und fertig.
Das Obige ist der gesamte Inhalt dieses Artikels. Wenn Sie es nicht gut verstehen, können Sie beide Seiten problemlos selbst meistern!
Verwandte Empfehlungen:
Detaillierte Erläuterung des Pulldown-Ladens und der Pullup-Aktualisierung des WeChat-Applets
WeChat-Applet implementiert Finger-Zoom-Bildcode-Sharing
PHP implementiert WeChat-Applet-Zahlungscode-Sharing
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Post-Anfrage in der WeChat-Applet-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!