IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] readyState passe de 1 à 4 : Probleme Connu ?


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut [AJAX] readyState passe de 1 à 4 : Probleme Connu ?
    Bonjour à tous, je taquine de l'AJAX depuis bientôt 4 mois.
    J'ai eu à boire et à manger niveau bug mais jusqu'à maintenant tout marchait plutôt correctement.

    Mon dernier en date est le suivant...
    je donne pour le moment une version simplifiée de mon problème juste pour savoir si vous l'avez déjà vu :
    je fais mon open() puis au momment de faire mon send() :
    à l'appel de onreadystatechange, j'affiche chaque état :

    comportement normal asyncrone :
    send();
    readyState est à 1 (suite au open)
    readyState passe à 2 / sortie du send()
    readyState passe à 3
    readyState passe à 4 -> on effectue le traitement en réponse.

    Dans mon cas : chezmoicaplante.org...
    send();
    readyState est à 1 (suite au open)
    readyState passe à 4 -> on effectue le traitement en réponse.
    Et là c'est le drame, responseText est vide, les headers et le status HTTP aussi.

    Ma question est : avant de rentrer dans les détails et de poster du code :
    Avez vous déjà vu un comportement similaire ??

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    tu fais un alert sur le change pour le vérifier ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    tu utilises quel code AJAX ? Celui du tutoriel du site ?

  4. #4
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    SpaceFrog:
    oui j'utilise alert pour afficher toutes les étapes de ma communication.
    Je précise que ce bug ne se produit que sur IE ! pas sur FIrefox donc pas de FireBug, pas de Venkman-debugger, et l'objet instancié est un ActiveX forcément :s

    donc pour le debug c'est javel-la-croix & la bannière : pour de l'ajax c'est du propre...
    Cette blague témoigne de ma saturation un vendredi après-midi

    FremyCompany: le code ajax utilisé a été écris par moi même à partir des meilleurs script que j'ai pu trouver depuis 3 mois. Donc il est assez clean.
    Ma question était si vous n'avez jamais vu ce problème, j'ai beau chercher sur le net en long/large/travers sans résultat...

    Je pourrai essayer de vous poster le code mais la classe entière doit faire à peu près 630 lignes est son comportement est largement spécifique à mon site. Donc ca servirai vraiment à rien...

    N'empèche là je sèche...
    1. Appel du send()
    2. onreadystatechange est appelée 2 fois de suite
    1er coup : readyState=1
    2eme coup : readyState=4
    le serveur n'a bien entendu rien vu passer.

    Mon objet activeX a du perdre la boule mais pourquoi : j'en sais rien...

  5. #5
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Question de cache... IE va chercher la réponse dans le cache...

    Fait une recherche 'AJAX cache' dans le forum...

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    rajoute un paramètre aléatoire au fichier cible ...

    genre new Date()
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Bien, j'ai corrigé les problèmes concernant mon cache, pensant que cela venait de la mais non...

    Mon problème à l'air de venir d'un effet de bord de beaucoup plus loin, je ne vais donc pas ennuyez plus que cela mon monde.

    A savoir que nous avons développé un 'scheduler' pour AJAX afin d'éviter les Race Conditions, peut-être celui-ci est à mettre en cause.

    Enfin, la suite lundi. Merci à tous

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    ceci étant un alert pour vérifier le states n'est pas des plus judicieux car pendant l'affichage de l'alert le status change ...
    as tu essayé de coller le résultat concaténé dans une variable si le rsultat te donne 14 c'est effet qu'il y a un souci si le resultat est 1234 c'est qu'il va trop vite pour que le changement soit detecté ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Okay bonne idée en effet, mais come onreadystatechange est un appel d'évenement je suis tout de même sceptique, mais je testerai quand même si besoin est.

    Sinon nous avons trouvé une autre piste,
    le site sur leques plante les appels ajax est en 'Https' (et oui j'avais omis de précisé cela mais c'est tellement naturel )
    et lorsque on le désactive : magie -> ca plante plus.

    Donc voila ca avance, vive le lundi :p

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    arf en effet le s est un détail qui à sans doute une importance majeure !
    délai dasn les réponses ? accès autorisés ou pas ???

    je n'ai jamais travaillé en ajax avec s ...
    désolé ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Pour ce qui est de l'authorisation d'accès je ne penses pas...
    Les Headers sont vide alors que je m'attendrais à l'erreur 500...
    Le plus étrange c'est que tout le problème se situe côté client : je n'ai aucune log de connection côté serveur apache...

    Je vais refaire des tests pour être sur !

    [edit] je confirme, tous le probleme est cote client, le access_log de apache reste vide lors d'une erreur.

    Donc mon code javascript semble jusqu'a preuve du contraire etre seul responsable, pourquoi le SSL causerait des problèmes... ?

    Bon je vais tenter de recoder ma classe d'appels AJAX en faisant un grand nettoyage.

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    je pense que cela doit être du au délai de réponse ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Citation Envoyé par SpaceFrog
    je pense que cela doit être du au délai de réponse ?
    C'est une solution probable... même si le cache me semblait encore plus probable

    Une question, et si tu désactive le cache ?

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    as tu essayé des paths avec paramètres variables genre new Date() de façpon à contourner le cache ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    tous les caches sont désactivés dans les headers
    pragma & cache control
    et coté client aussi...

  16. #16
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Bien, j'arrive maintenant a reproduire mon bug systematiquement :

    J'ai un refresh ajax toute les 30 secondes sur ma page,
    au bout de la troisieme ou quatrieme fois, cela plante,

    j'ai stocké la sequence celle-ci est bien 14 au lieu de 1234.

    lorsque je désactive ssl, tout marche bien.

    Pourtant pendant la séquence 14 : aucune connection au serveur apache ne se fait (access_log a l'appui)

    Les headers sont les suivants pour mes appels ajax (idem pour les autres aussi sans le text/xml) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    header('Content-Type: text/xml');
    header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
    header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header ("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1
    header ("Pragma: no-cache");                          // HTTP/1.0
    Mon IE a ordre de reloader la page a chaque visite.

    Bon voilà j'en suis là... je désespère un peu alors si un quidam a une idée même complètement saugrenue, je suis preneur

  17. #17
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532

  18. #18
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Je viens de regarder les trois topics mais je suis conforme à chacun des points soulevés

    j'ai aussi essayé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url += "&currentDate=" + escape(new Date())
    sans succés...

    vraiment étrange...

  19. #19
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    tu veux dire que tu as bien changer getXhr et changer tout les getXhr() en var xhr=getXhr() ???

    si oui, alors je voudrais bien voir ton code, parceque c'est vraiment étrange !

  20. #20
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Comme je l'ai dis mon code a été écris par moi même à partir de la multitude de tutoriaux disponibles, pas seulement ceux du site.
    Nous sommes deux a travailler dessus, sur le code général depuis 3 mois et sur ce bug depuis maintenant trois jour.

    Je ne dénigre pas le fait que j'ai pu faire une erreur (je préfère ça qu'un bug inexplicable)

    par contre le code risque d'être un peu lourd à avaler, donc prends garde.
    T'es prévenu :p

    Tu remarqueras qu'on s'est basé sur le code de sajax d'abord, mais qu'on a beaucoup dérivé depuis (certains noms de fonction ont survécu)
    J'ai mis de coté les fonctions de formattage XML qui n'ont j'en suis sur rien à voir avec le probleme.

    jsShedule est une fonction permettant la gestion synchrone et assistée des appels ajax. Le but étant de pouvoir emettre les appels en asynchrone sans bloquer le navigateur mais de les emettre en synchrone pour éviter les race conditions côté serveur. Il fonctionne comme une pile tout ce qu'il y a de plus bête.

    cl_cms_AjaxCall.SendData() contient tous les 'appels' ajax

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
     
    tabAjaxRequests = new Array();
     
    //Libairie sajax sous licence BSD
    var jsDebug_mode = false;
    var sajax_request_type = "POST";
    var sajax_requests = new Array();
    var b_Identifying=false;
     
     
    /*!
    \brief	Permet de lancer le prochain appel ajax en attente dans la pile
    \author	gmr
    \date	03/05/2006
    \return	
    */		
    function jsShedule()
    {
    	if ((tabAjaxRequests)&&(tabAjaxRequests.length)&&(!b_Identifying))
    	{
    		AjaxCall=tabAjaxRequests[0];
    		jsDebug("Taille pile:" + tabAjaxRequests.length, true);
    		jsDebug("AjaxCall: class="+AjaxCall.sz_ClassName);
    		jsDebug("Event="+AjaxCall.sz_EventName);
    		jsDebug("Param="+AjaxCall.m_CallbackArgs);
     
    		if (AjaxCall.b_Redirect==true)
    		{
    			// on arete les appels ajax en cours
    			if (o_AJAX)
    			{
    				o_AJAX.abort();
    				//delete(o_AJAX);
    				//o_AJAX=null;
     
    			}
     
    			location.href = AjaxCall.uri;
    		}
    		else
    		{
    			AjaxCall.SendData(AjaxCall.sz_Callback, AjaxCall.m_CallbackArgs);
    		}
    	}
    }
     
    var o_AJAX=null;
     
    /*!
    \brief	Permet de récupérer un champ brut
    \date	03/05/2006
    \return	XMLHttpRequest object
    */
    function sajax_init_object()
    {
    	if (o_AJAX)
    	return;
     
    	jsDebug("sajax_init_object() called..");
     
    	if (window.XMLHttpRequest) {
    		o_AJAX = new XMLHttpRequest();
    	}
    	else if (window.ActiveXObject) {
    		var msxmlhttp = new Array(
    			"Msxml2.XMLHTTP.5.0",
    			"Msxml2.XMLHTTP.4.0",
    			"MSXML2.XMLHTTP.3.0",
    			"MSXML2.XMLHTTP",
    			"Microsoft.XMLHTTP"
    		);
    		for (var i = 0; i < msxmlhttp.length; i++)
    		{
    			try {
    				o_AJAX = new ActiveXObject(msxmlhttp[i]);
    				jsDebug('Using : '+msxmlhttp[i],true);
    				break;
    			} catch (e) {
    				o_AJAX = null;
    			}
    		}
    	}
     
    	if (!o_AJAX)
    		jsDebug("Could not create connection object.");
     
    	return o_AJAX;
    }
    /*
    \param	sz_ModuleKey Nom du module
    \param	sz_ClassName Nom de la Classe
    */
    function cl_cms_AjaxCall(sz_ModuleKey, sz_ClassName)
    {
    	this.sz_ModuleKey	= sz_ModuleKey;
    	this.sz_ClassName	= sz_ClassName;
    	this.m_Args			= new Array();
    	this.uri			="index.php";
    	this.b_Redirect		=false;
     
    	sajax_init_object();
     
    	/*
    	\param	sz_EventName Nom de l'évènement
    	*/
    	this.SetEvent = function(sz_EventName)
    	{
    		this.sz_EventName=sz_EventName;
    	}
     
    	/*
    	\param	Param Param de l'évènement
    	*/
    	this.AddParam = function(Param)
    	{
    		this.m_Args[this.m_Args.length]=Param;
    	}
     
    	this.Redirect = function(sz_Callback, m_CallbackArgs)
    	{		
    		this.b_Redirect=true;
     
    		if (this.sz_ModuleKey) this.uri += '?module='+this.sz_ModuleKey;
    		if (this.sz_ClassName) this.uri += '&class='+this.sz_ClassName;
    		if (this.sz_EventName) this.uri += '&event='+this.sz_EventName;
     
    		if (this.m_Args.length>0)
    		{	
    			var xmlForm = "&m_Args=";
    			xmlForm += "<arg>";			
    			xmlForm += "<param>";
    			xmlForm += jsConvertTabToXML(this.m_Args,0);
    			xmlForm +="</param>";
    			xmlForm += "</arg>";
    			this.uri += xmlForm;
    		}
     
    		// on supprime les appels en attente
    		// on garde l'appel en cours pour qu'il finisse
    		// on ajoute le redirect dans la pile
    		while (tabAjaxRequests.length>1)
    		{
    			tabAjaxRequests.pop();		
    		}
     
    		if (tabAjaxRequests.length==0)
    		{
    			tabAjaxRequests.push(this);
    			jsShedule();
    		}
    		else
    		{
    			tabAjaxRequests.push(this);
    		}
     
    		return false;
    	}
     
    	/*
    	\param	sz_Callback Fonction appelée en retour
    	\param	m_CallbackArgs Arguments passés à la fonction en retour
    	*/
    	this.PostData = function(sz_Callback, m_CallbackArgs)
    	{	
    		this.sz_Callback = sz_Callback;
    		this.m_CallbackArgs = m_CallbackArgs;
     
    		var b_Found=false;
    		for (i=0;i<tabAjaxRequests.length;i++)
    		{
    			if ((tabAjaxRequests[i].sz_Callback		== this.sz_Callback)&&
    				(tabAjaxRequests[i].m_CallbackArgs	== this.m_CallbackArgs)&&
    				(tabAjaxRequests[i].sz_ModuleKey	== this.sz_ModuleKey)&&
    				(tabAjaxRequests[i].sz_ClassName	== this.sz_ClassName)&&
    				(tabAjaxRequests[i].sz_EventName	== this.sz_EventName)&&
    				(tabAjaxRequests[i].uri				== this.uri))
    			{
    				if (tabAjaxRequests[i].m_Args.length == this.m_Args.length)
    				{
    					b_Found=true;
    					for(j=0;j<this.m_Args.length;j++)
    					{
    						if (this.m_Args[j]!=tabAjaxRequests[i].m_Args[j])
    						{
    							b_Found=false;
    							break;
    						}
    					}
    				}
    				if (b_Found==true)
    				return;
    			}
    		}
     
    		if (b_Found==false)
    		{
    			if (tabAjaxRequests.length==0)
    			{
    				tabAjaxRequests.push(this);
    				jsShedule();
    			}
    			else
    			{
    				tabAjaxRequests.push(this);
    			}
    		}
    	}
     
    	this.SendData = function(sz_Callback, m_CallbackArgs)
    	{
    		//b_WaitingAjaxReturn = true;
    		jsDebug("posting");
     
    		//alert("Ajax call 1"+this.sz_EventName);
    		if (o_AJAX)
    		{
    			o_AJAX.abort();
    			//delete(o_AJAX);
    			//o_AJAX=null;
    		}
     
    		if ((o_AJAX == null) || (o_AJAX == undefined))
    		{
    			jsDebug("Impossible de creer l'objet");
     
    			if (sajax_failure_redirect != "")
    			{
    				location.href = sajax_failure_redirect;
    				b_WaitingAjaxReturn=false;
    				return false;
    			} 
    			else
    			{
    				jsDebug("NULL sajax object for user agent:\n" + navigator.userAgent);
    				b_WaitingAjaxReturn=false;
    				return false;
    			}
    		} 
    		else
    		{
    			o_AJAX.onreadystatechange = function()
    			{		
    				jsDebug(o_AJAX.readyState);
     
    //alert('Switching to state : '+o_AJAX.readyState);
    				if ((o_AJAX) &&
    					(o_AJAX!=undefined) &&
    					(o_AJAX.readyState!=undefined))
    				{
    					if (o_AJAX.readyState==4){
     
     
    						if (o_AJAX.status != 200) {
    							jsDebug('TRANSFER ERROR !!',true);
    							jsDebug("Received : "+o_AJAX.responseText);
    							jsDebug("Status : "+o_AJAX.statusText);
    							jsDebug("Headers : "+o_AJAX.getAllResponseHeaders());
    			            }
    						else
    						{
    							jsDebug("OK");	
    						}
    //alert("Received : "+o_AJAX.responseText);
    //alert("Status : "+o_AJAX.statusText);
    //alert("Headers : "+o_AJAX.getAllResponseHeaders());
     
    						var status;
    						var data;
    						var xml = o_AJAX.responseXML;
     
    						//	Le deuxieme test n'est executé que si le premier renvoie true [grace aux &&]
    						//	Dans le cas ou meme si le premier test renvoie false on test la seconde partie, FF génère une exception
     
    						//Si le retour de la fonction PHP n'est pas un document XML valide
    						if ((xml==null)||(xml.documentElement == null))
    						{ 
    							if(sz_Callback)
    							{
    								sz_Call = 'sz_Callback(status,data';
    								if(m_CallbackArgs)
    								{
    									sz_Call += ',';
    									sz_Call += 'm_CallbackArgs';
    								}
    								sz_Call += ');';
    							}
     
    							// on renvoie le retour à la fonction callback en mode text
    							data = new Array();
    							status = 0;
    							/*if (xml==null)
    							sz_Error = "XML is null !! <br>";//+sz_Call+"<br>"+o_AJAX.responseText.replace(/^\s*|\s*$/g,"");
    							else
    							sz_Error = "xml.documentElement is null !! <br>";//+sz_Call+"<br>"+o_AJAX.responseText.replace(/^\s*|\s*$/g,"");*/
    							//jsDisplayErrorMessage(status, sz_Error);
    							tabAjaxRequests.shift();
    							jsShedule();
    						}
    						else
    						{	
    							data = jsParseAjaxParam(xml);
     
    							if (data['reconnect']!=undefined)
    							{
    								document.getElementById("msgDiv").innerHTML = data['reconnect'];
    								jsCenterPopupInScreen("msgDiv");
    								document.getElementById("msgDiv").style.visibility='visible';
    								b_Identifying=true;
    								jsIdeSetFocus();
    								tabAjaxRequests[tabAjaxRequests.length]=tabAjaxRequests[0];
    							}
    							else if (data['message']!=undefined)
    							{
    								sz_Error = data['message'];
    								alert(sz_Error);
    							}
    							else if (data['error']!=undefined)
    							{
    								sz_Error = data['error'];
    								jsDisplayErrorMessage(status, sz_Error);
    							}
    							else
    							{
    								status = 0;
    								if(sz_Callback)
    								{
    									sz_Call = 'sz_Callback(status,data';
    									if(m_CallbackArgs)
    									{
    										sz_Call += ',';
    										sz_Call += 'm_CallbackArgs';
    									}
    									sz_Call += ');';
    									try 
    									{
    										eval(sz_Call);
    									} 
    									catch (e) 
    									{
     
    										sz_Error = "<B>A Javascript error has occured :</b><br><br>\n ";
    										sz_Error += "name: "+e.name + "<br><br>\n ";
    										sz_Error += "message : "+e.message + "<br><br>\n ";
    										sz_Error += "fileName : "+e.fileName + "<br><br>\n ";
    										sz_Error += "lineNumber : "+e.lineNumber + "\n";
     
    										jsDebug("Caught error " + e + ": Could not eval " + data );
     
    										jsDisplayErrorMessage(status, sz_Error);	
    										throw(e);
    									}
    								}				
    							}
    						}
     
    						if (tabAjaxRequests)
    							tabAjaxRequests.shift();	
     
    						jsShedule();
    					}
    				}
    			}		
     
     
    //alert('avant open : '+sajax_request_type+" : "+this.uri);
    			o_AJAX.open(sajax_request_type, this.uri, true);
    //alert('apres open');
    			sajax_requests[sajax_requests.length] = o_AJAX;
     
    			if (sajax_request_type == "POST")
    			{
    				o_AJAX.setRequestHeader("Method", "POST " + this.uri + " HTTP/1.1");
    				o_AJAX.setRequestHeader("Cache-Control","no-cache");
    				o_AJAX.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    			}
     
    			var i, n;
    			var post_data;
    			var target_id;
     
    			post_data = "req_type=ajax";
    			if (this.sz_ModuleKey) post_data += "&module=" + escape(this.sz_ModuleKey);
    			if (this.sz_ClassName) post_data += "&class=" + escape(this.sz_ClassName);
    			if (this.sz_EventName) post_data += "&event=" + escape(this.sz_EventName);
    			post_data += "&SCEcurrentDate=" + escape(new Date());
    			func_name = this.sz_ModuleKey+','+this.sz_ClassName+','+this.sz_EventName;
     
    			var xmlForm = "&m_Args=";
    			xmlForm += "<arg>";			
    			xmlForm += "<param>";
    			if(this.m_Args){
    				if(isArray(this.m_Args)){	
    					xmlForm += jsConvertTabToXML(this.m_Args,0);
    				}
    				else{
    					if(m_Args.length > 1){	
    						xmlForm += "<string><![CDATA["+m_Args+"]]></string>";
    						if(m_Args == false) xmlForm += "<boolean>false</boolean>";
    						if(m_Args == true) xmlForm += "<boolean>true</boolean>";
    					}
    				}
    			}
     
    			xmlForm +="</param>";
    			xmlForm += "</arg>";
     
    			post_data += xmlForm;
     
    			jsDebug("Sending...");
     
    			try{
    				res = o_AJAX.send(post_data);
    			} catch (e) {
    //alert('t\'as gagné');			
    			}
    			jsDebug("sent!");
    			//jsDebug(func_name + " waiting..");
    			return true;
    		}
    	}	
    }


    ----
    blague du jour :
    C'est parce que la vitesse de la lumiere est supérieur a celle du son que certaines personnes semblent brillantes avant d'avoir l'air con

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. UI Mobile ajax données passées onSuccess et html()
    Par herbert8 dans le forum jQuery
    Réponses: 1
    Dernier message: 31/08/2011, 10h11
  2. [AJAX] Ajax : readyState bloqué à 1
    Par nynnie7 dans le forum AJAX
    Réponses: 3
    Dernier message: 06/02/2011, 13h46
  3. Validation avec un post ajax ne passe pas dans certains navigateurs
    Par Lucas Panny dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/12/2010, 19h28
  4. temps qui passe à partir d'une date connue
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/09/2009, 21h40
  5. [AJAX] AJAX ne passe pas sur IE
    Par bdaboah dans le forum AJAX
    Réponses: 11
    Dernier message: 27/08/2009, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo