Maison >interface Web >js tutoriel >Quels sont les problèmes avec WeChat JSSDK en ajax demandant différentes pages ?
Je vais maintenant partager avec vous un article sur le problème WeChat JSSDK d'ajax demandant différentes pages. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde.
Scénario problématique :
J'ai un contenu de formulaire sur la page A qui doit être imprimé à l'aide d'une imprimante Bluetooth, remplissez les informations du formulaire , et demande via ajax Les informations sont envoyées au fichier B (PHP) pour traitement. Après avoir sauté normalement à la page B via le formulaire, elles peuvent être imprimées, car en plus du PHP qui traite les données, la page B également. contient du code JS, qui est la partie JSSDK. Cependant, lorsqu'il est envoyé via une requête ajax, il n'y a pas de réponse et tous les jssdk à l'exception de wx.ready et wx.config ne peuvent pas être exécutés. (Les deux fichiers A.B ont les configurations wx.config et wx.ready)
Par exemple, les paramètres d'envoi de données :
wx.invoke('sendDataToWXDevice',data,function(res){ //微信提供的接口,只有这么一个回调函数,如果通过ajax请求,则无法进入回调函数 if(res.err_msg=='sendDataToWXDevice:ok') { alert("打印成功"); window.history.go(-1); } else { alert("打印失败"); } });
J'ai donc deviné qu'en demandant le fichier PHP, les données renvoyées contenaient la partie code JS de ma page B En d'autres termes, la page A avait wx.config et wx.ready, et la page B avait wx.config et wx.ready. Le contenu renvoyé par la page a également ces deux interfaces. Afin d'éliminer ce problème,
j'ai supprimé toutes les interfaces WeChat de la page B. Seul le contenu qui doit être envoyé après traitement du formulaire est enregistré dans une entrée.
//返回 处理后的数据 echo '<input type = "hidden" name = "print_str" id = "print_str" value="'.$hex_str.'"/ >'; echo '<input type = "hidden" name = "device_id" id = "device_id" value="'.$device_ID.'"/ >'; ?>
L'impression de la page de saut d'origine est modifiée en impression de demande asynchrone. En fait, l'envoi des données de WeChat à l'appareil est toujours exécuté sur la page A et. fichier B. Il est uniquement responsable du renvoi des données transmises de A à B et traitées par cryptage. Par conséquent, supprimez tous les codes HTML et JS mixtes dans le fichier B. Il convient de noter si la configuration contient l'attribut beta:true. , car cela implique du matériel SDK est requis, et si l'interface matérielle du SDK à utiliser est également renseignée dans les paramètres de la liste d'interface
Je pensais que mon idée était correcte à l'époque. Mais chaque fois que j'utilise document.write pour écrire les résultats renvoyés dans les fonctions de rappel de wx.invoke, y compris openWXDeviceLib, sendDataToWXDevice, etc., mais je constate vite que la sortie après wx.invoke n'est pas exécutée à chaque fois, et mon original page Le contenu a également été effacé. Je n'étais pas au courant de ce problème à ce moment-là, j'ai donc continué à tester jusqu'à ce que je génère les données renvoyées par la page B avant l'appel (le contenu document.write ci-dessus est ma fonction de rappel de réussite une fois la demande réussie. ) sortie), j'ai réalisé que les données que je voulais envoyer étaient devenues indéfinies lorsque j'ai exécuté la méthode d'invocation, et j'ai soudainement découvert que le contenu original de ma page avait été effacé (car il était auparavant passé à B La page a été imprimée, donc c'était vide, ~~, je m'y suis habitué et je n'ai remarqué aucun changement). Plus tard, je suis passé à la sortie d'alerte et j'ai pu imprimer normalement, c'est-à-dire dans la fonction de rappel encapsulée en ajax. JQUERY, utilisez document.write pour afficher, réinitialisera le contenu de la page (la raison pour laquelle j'utilise document.write pour afficher est qu'à une certaine étape du test précédent, la configuration initialement utilisée comme débogage a fait apparaître des informations via la fenêtre d'alerte, mais je ne sais pas pourquoi il a utilisé document.write Le formulaire est écrit sur la page. J'ai oublié ce qui s'est passé à ce moment-là, donc cette erreur s'est produite, mais je suis toujours au courant de ce problème de JQ)
Rappelez-vous : L'utilisation de document.write pour afficher le contenu dans la fonction de rappel de réussite ajax de JQuery réinitialisera le contenu de la page. Comme pour les autres fonctions de rappel, vous pouvez y jeter un œil vous-même.
Ce qui précède est ce que j'ai compilé pour vous. J'espère que cela vous sera utile à l'avenir. Articles connexes :Une brève discussion sur les différentes méthodes d'introduction des styles less, sass et css dans les composants de fichier unique Vue-cli
Résoudre le problème de chargement des projets créés par vue-cli
Utilisez vue pour écrire un exemple de code pour un graphique carrousel imitant un livre simplifié
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!