2014-09-22 4 views
2

Ce problème a été reproduit sur PlayStation 3, 4, Xbox360, Xbox One. Ce problème est présent avec toutes les versions d'AjaxPro.ConnectFailure dans AjaxPro sur certains navigateurs

Lors d'une requête Ajax (à l'aide d'AjaxPro), le serveur renvoie le contenu correct. Cependant, l'objet retourné dans la fonction de rappel est

{ 
    "error": 
    { 
    "Message":"","Type":"ConnectFailure","Status":200},"value":null, 
    "request": 
    { 
     "method":"MethodName", 
     "args": 
     { 
      "Argument1":"1111","Argument2":"2222" 
     } 
    }, 
    "context":null,"duration":18 
    } 
} 

Répondre

4

Dans mon cas, je vais avoir cette même erreur lors de l'utilisation AjaxPro par https, TLS 1.2, ECDHE_RSA avec échange de clés P-256 et de chiffrement AES_256_GCM (IE11 +, Chrome51 +, + Firefox49. Vérifiez le vôtre here). Il fonctionne bien avec AES_256_CBC obsolète avec le chiffrement HMAC-SHA1.

Le problème est que XMLHttpRequest.statusText propriété est vide après la réponse du serveur (je ne sais pas vraiment pourquoi) et méthode AjaxPro.Request.prototype.doStateChange (fichier ajaxpro/core.ashx) attendu « OK » de prendre une réponse valide:

var res = this.getEmptyRes(); 
if(this.xmlHttp.status == 200 && this.xmlHttp.statusText == "OK") { 
    res = this.createResponse(res); 
} else { 
    res = this.createResponse(res, true); 
    res.error = {Message:this.xmlHttp.statusText,Type:"ConnectFailure",Status:this.xmlHttp.status}; 
} 

J'ai finalement décidé de passer outre méthode AjaxPro.Request.prototype.doStateChange et permettre à une valeur vide dans this.xmlHttp.statusText.

J'ajouté ce script à mes pages concernées:

$(function() { 
    if (typeof AjaxPro != 'undefined' && AjaxPro && AjaxPro.Request && AjaxPro.Request.prototype) { 
     AjaxPro.Request.prototype.doStateChange = function() { 
      this.onStateChanged(this.xmlHttp.readyState, this); 
      if (this.xmlHttp.readyState != 4 || !this.isRunning) { 
       return; 
      } 
      this.duration = new Date().getTime() - this.__start; 
      if (this.timeoutTimer != null) { 
       clearTimeout(this.timeoutTimer); 
      } 
      var res = this.getEmptyRes(); 
      if (this.xmlHttp.status == 200 && (this.xmlHttp.statusText == "OK" || !this.xmlHttp.statusText)) { 
       res = this.createResponse(res); 
      } else { 
       res = this.createResponse(res, true); 
       res.error = { Message: this.xmlHttp.statusText, Type: "ConnectFailure", Status: this.xmlHttp.status }; 
      } 
      this.endRequest(res); 
     }; 
    } 
}); 
+0

Merci de fournir une solution de contournement. –

0

L'allusion à ce problème est en

"Message":"" 

fichier core.ashx de AjaxPro est générée à l'aide core.js

Dans le noyau .js, le code suivant est responsable de la génération de l'objet de réponse lorsque la réponse du serveur est reçue.

if (this.xmlHttp.status == 200 && this.xmlHttp.statusText == "OK") { 
     res = this.createResponse(res); 
    } else { 
     res = this.createResponse(res, true); 
     res.error = { Message: this.xmlHttp.statusText, Type: "ConnectFailure", Status: this.xmlHttp.status }; 
    } 

Pour une raison quelconque, les navigateurs sur les plates-formes identifiées ne reviennent pas xmlHttp.statusText comme « OK ». Au lieu de cela, il est vide. Cela provoque AjaxPro tomber à travers dans la clause "ConnectionFailure".

Questions connexes