まず、リクエストを行うときにサーバーがパラメータを受け取らない原因となったミニ プログラム ドキュメントのバグを宣言します。
サンプル コード:
wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { 'Content-Type': 'application/json' }, success: function(res) { console.log(res.data) } })
ヘッダーの Content-Type は小文字の content-type である必要があります。パラメータ。長い間苦労していましたが、サーバーを変更した後も機能しません。これが問題であることがわかりました。パラメーターはリクエスト ペイロード内にあり、サーバーはそれを受信できません。次の変換を使用した後、
function json2Form(json) { var str = []; for(var p in json){ str.push(encodeURIComponent(p) + "=" + encodeURIComponent(json[p])); } return str.join("&"); }
は最終的にコンテンツ タイプの問題であると判断します。結局、これを小文字に変更すれば問題ありませんでしたが、WeChat は非常にレベルの低い間違いを犯し、開発者をイライラさせてしまったと感じました。言わないで、コードの説明に入りましょう。
1、HTTPリクエストクラス
import util from 'util.js'; /** * url 请求地址 * success 成功的回调 * fail 失败的回调 */ function _get( url, success, fail ) { console.log( "------start---_get----" ); wx.request( { url: url, header: { // 'Content-Type': 'application/json' }, success: function( res ) { success( res ); }, fail: function( res ) { fail( res ); } }); console.log( "----end-----_get----" ); } /** * url 请求地址 * success 成功的回调 * fail 失败的回调 */ function _post_from(url,data, success, fail ) { console.log( "----_post--start-------" ); wx.request( { url: url, header: { 'content-type': 'application/x-www-form-urlencoded', }, method:'POST', data:{data: data}, success: function( res ) { success( res ); }, fail: function( res ) { fail( res ); } }); console.log( "----end-----_get----" ); } /** * url 请求地址 * success 成功的回调 * fail 失败的回调 */ function _post_json(url,data, success, fail ) { console.log( "----_post--start-------" ); wx.request( { url: url, header: { 'content-type': 'application/json', }, method:'POST', data:data, success: function( res ) { success( res ); }, fail: function( res ) { fail( res ); } }); console.log( "----end----_post-----" ); } module.exports = { _get: _get, _post:_post, _post_json:_post_json }
テストケース
2.1 getリクエスト
//GET方式 let map = new Map(); map.set( 'receiveId', '0010000022464' ); let d = json_util.mapToJson( util.tokenAndKo( map ) ); console.log( d ); var url1 = api.getBaseUrl() + 'SearchTaskByReceiveId?data='+d; network_util._get( url1,d, function( res ) { console.log( res ); that.setData({ taskEntrys:res.data.taskEntrys }); }, function( res ) { console.log( res ); });
2.2 POSTリクエスト
//Post方式 let map = new Map(); map.set( 'receiveId', '0010000022464' ); let d = json_util.mapToJson( util.tokenAndKo( map ) ); console.log( d ); var url1 = api.getBaseUrl() + 'SearchTaskByReceiveId'; network_util._post( url1,d, function( res ) { console.log( res ); that.setData({ taskEntrys:res.data.taskEntrys }); }, function( res ) { console.log( res ); });
効果
以上がWeChat ミニ プログラムのネットワーク リクエストのカプセル化と改善の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。