recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Principe jquery jsonp : problème de position généré dynamiquement par la balise js

Le principe de

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 ?

迷茫迷茫2777 Il y a quelques jours887

répondre à tous(4)je répondrai

  • ringa_lee

    ringa_lee2017-05-19 10:35:18

    //同源策略下有两个文件: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)

    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.

    répondre
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:35:18

    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.

    répondre
    0
  • 天蓬老师

    天蓬老师2017-05-19 10:35:18

    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

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:35:18

    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é.

    répondre
    0
  • Annulerrépondre