jquery jsonp est d'utiliser script
标签中src
属性来解决前后端数据请求遇到的跨域问题.有一点不明白的是jquery把动态生成的script
标签追加到了head
标签中,也就是文档的头部;一般我们的回调函数在body
La fonction est d'abord déclarée puis utilisée. Pourquoi les données transmises en arrière-plan peuvent-elles être obtenues en l'appelant directement sans déclaration ?
Voici un test que j'ai fait :
//同源策略下有两个文件:a.html和b.js.
//a.html中的内容为:
//<script type="text/javascript" src="b.js"></script>
function test(val){
console.log(val)
}
//<script type="text/javascript" src="b.js"></script>
//b.js的内容为:
test(10)
Si cette chaîne de code est placée au-dessus de la fonction test
函数下面就会打印出数字10,如果放在test
déclarée, une erreur sera signalée
ReferenceError: test is not defined
Par rapport à l'implémentation de jquery, je ne comprends pas très bien pourquoi le js généré dynamiquement sera exécuté même s'il est appelé avant la fonction déclarée ?
S'il s'agit d'un src directement lié, le navigateur l'analyse de haut en bas et récupérera d'abord la valeur dans b.js. La fonction de a.js n'a pas encore été chargée dans la page et il n'y a pas de test ( ) cette fonction, donc une erreur sera signalée
Mais lors de l'envoi d'une requête ajax, vous attendez que la page soit complétée avant de la demander. Autrement dit, vous déclarez d'abord une fonction de rappel, puis créez un script à demander. Par conséquent, l'emplacement du script à ce moment n'affectera pas. le résultat final.
Parce que vous avez ignoré le problème asynchrone, en termes d'ordre d'exécution, lorsque la balise de script renvoyée par le serveur est chargée, votre fonction de rappel locale doit avoir été définie, vous pouvez donc appeler la méthode correspondante.
En termes simples :
jsonp=Définir la fonction de rappel local=>Load script tag=>Exécuter le contenu de la balise de script chargée.
jsonp Pour parler franchement, c'est un accord :
'Nous sommes trop éloignés les uns des autres et nous ne pouvons pas nous joindre, comment peux-tu me donner tes affaires ?'
'Et si je te le lançais, peux-tu l'attraper ?'
'D'accord, j'ai un panier (callback), qui est à votre position 1 heure (callbackName), vous le lancez là'
Quant à savoir si le panier existe ou s'il est dans la bonne position, il le fait cela n'affecte pas votre accord
La position de chargement js introduite par jsonp est la position où l'instruction jsonp pour obtenir js est exécutée. Quant au placement, ce n'est qu'une formalité.