网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網

Mjw:微信小程序之踩坑之旅一,wx.request 和 wx.uploadFile

發布時間:2018-03-30 16:15 所屬欄目:小程序開發教程
感謝作者@mjw同學;uploadFile困擾著很多人,本文可以作為參考之一,希望mjw同學可以繼續完善之。。。假如你在解決wx.request 和 wx.uploadFile中有心得,也歡迎分享出來!

微信小程序公測也有段時間了,但是里面的坑踩了一個又一個,心也是夠累的。本文說說關于 wx.request 和 wx.uploadFile 對請求響應的不同表現。

wx.request

使用 wx.request 發出請求,在對接口的響應做處理時,官方提供了三個回調函數,分別是 success,fail,complete,看了官方文檔,其實也很清晰什么時候用什么回調,在這里也不多贅述了。

wx.uploadFile

使用 wx.uploadFile 可以上傳文件,并可以攜帶一些額外的信息,在對接口的響應做處理時,和 wx.request 一樣,也提供了同樣的三個回調函數,在官方文檔中,其描述幾乎是一樣的(除了success)。

在對這兩個接口有了一定的了解后,說說這兩個接口對請求的相應的不同表現。

先上張圖體會下:

wx.request 發出請求后,無論請求接口返回的 HTTP 狀態碼(200也好,500也好)是什么,都會進入 success 回調,和一般認為的 500 會進入 fail 回調不一樣。(吐槽:對,接口是微信開發團隊定的,按照這個規律,我們只能遵循,然后我就遵循這一規律繼續寫)

wx.uploadFile 發出請求后,如果請求接口返回的 HTTP 狀態碼為200時,會進入 success 回調,而返回其他狀態碼(如400、405、500等)時,會進入 fail 回調(黑人問號.jpg)。

雖然這不是啥大問題,但在微信小程序的開發過程中,上面提到的問題還是會讓人一下子摸不著路子。個人覺得接口保持一致性還是很重要的,不過游戲的制定者不是我們,只能希望越改越好吧。

感覺不坑,對吧?下面其實才是坑人的地方。

本文得出結果是在微信開發者工具上運行的結果,跟實際手機預覽得出的結果又有出入(微信你搞什么鬼?。。。?,如果在手機上預覽(我是在iOS上預覽的)的話會變成—— wx.request 和 wx.uploadFile 的回調被調用的情況是一樣的。

 
相關問題:
問題描述:
手機預覽時 wx.uploadFile 自定義 header 不生效

我遇到的問題:手機預覽時 wx.uploadFile 自定義 header 不生效。

下面是我的問題描述:
我在使用 wx.uploadFile 這個接口上傳文件時,需要在 header 中添加一些自定義的字段,根據文檔,我完成了小程序的代碼:

這是后端接口的代碼,用的是 PHP 的 Symfony 框架:

代碼在開發者工具運行時,可以正確上傳文件,后臺接口也可以正確獲取信息,如上傳的文件、額外的 formData 數據和自定義的 header 字段,但在手機預覽時,卻無法正確獲取 header 的自定義字段,添加了 header 的日志記錄之后發現,在手機端預覽的時候,header 中沒有包含我代碼中自定義的字段。

我也針對這個測試接口自己寫了測試代碼:

運行如上截圖的測試代碼并查看日志輸出:

解決過程:

小程序端,我把自定義的 header 字段放到了 formData 的位置,后端就可以正常接收自定義的 header 字段了。

但我還是有點懵逼,難道文檔是用來騙人的?

補充:

測試時使用到:

  • 微信開發者工具 v0.11.112300

  • 手機預覽 iPhone6s 微信6.3.31

  • 后臺使用 Symfony 3.1.7

  • PHP 5.6.28

  • Nginx

經過測試,發現小程序在調用 wx.uploadFile 目前(不知道微信開發團隊后續會怎樣修復)是如下情況:

如果在微信開發者工具想正確傳遞自定義 header 到后臺接口時,只需要按照官方文檔所說,把自定義 header 放在 wx.uploadFile 接口的 header 配置選項。

如果想在手機預覽正確傳遞自定義 header 到后臺接口時,就要把自定義 header 放到 wx.uploadFile 接口的 formData 配置選項。

前方有坑!

在使用 wx.uploadFile 時,配置選項中 formData 使用時,在開發者工具和手機預覽時,又有出入(什么鬼?。?/p>

舉個例子,我需要在上傳文件時傳遞一個額外的 flag 到后臺接口,這個 flag 的值是 true,經過測試,發現小程序目前得出的結果是:

如果想在微信開發者工具正確傳遞這個 flag 到后臺接口,則可以用如下代碼傳遞:

wx.uploadFile({
    // 省略其他
    formData: {
        flag: true
    }
})

如果想在手機預覽正確傳遞這個 flag 到后臺接口,則需要用如下代碼傳遞:

wx.uploadFile({
    // 省略其他
    formData: {
        flag: 'true'
    }
})

其實看了官方文檔,的確是有看到 formData 的屬性值有用引號引起來,但卻沒有在文檔中做出說明,而且,這個用法在微信開發者工具和在手機預覽時有著明顯的區別。

如上,如果在手機預覽時,flag 的值沒有使用引號引起來,則后臺通過 request 是獲取不了的(黑人問號.jpg)。

在這里吐槽一下微信小程序沒有提供一個很好的 bug 反饋渠道,按照官方文檔,我嘗試過發送郵件給微信開發團隊,但始終沒有回音。

上面是我最新的測試結果,微信小程序不知道會不會有所修復,又或者是我所用的技術棧所導致的問題,所以這里也希望用其他技術棧的童鞋嘗試一下。

本文 Demo 的倉庫:https://github.com/jwma/daily-coding/tree/master/wechat-app/request-and-upload-file



本文地址:http://www.xiuhaier.com/wxmini/doc/course/22988.html 復制鏈接 如需定制請聯系易優客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×