在Chrome 59中运行的JQuery代码现在在Chrome 60中中断了

时间:2017-08-09 11:47:28

标签: javascript jquery google-chrome

我在Chrome更新之前有这个配置(Chrome / 59.0.3071.112 V8 / 5.9.211.38),现在我在Chrome更新后有了这个配置:Chorme / 60.0.3112.90 V8 6.0.286.52。

以下代码在Chrome 59中运行良好,现在它在Chrome 60上运行了。你能给我一些建议吗?看起来find(“Mensagem”)方法不再起作用了......

$sql="SELECT MIN(PrisMel) FROM `toosttable` WHERE `Vare` = 'Lærer'";
$result=mysqli_query($con,$sql);
$(function() {
  var retorno = $.parseXML('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><op_st_GerarBoletoCobranca_R_H00Response xmlns="http://www.capemisa.com.br/COB/st_GerarBoletoCobranca_R_H00/2017/01"><op_st_GerarBoletoCobranca_R_H00Result i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/><pProcedureRaiseErrorCollection xmlns:a="http://schemas.datacontract.org/2004/07/Capemisa.WCFService.Core" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:ProcedureRaiseError><a:Fonte>.Net SqlClient Data Provider</a:Fonte><a:Mensagem>COB.st_GerarBoletoCobranca_R_H00: A data de vencimento informada não é válida ou não foi possível verificar.</a:Mensagem><a:Numero>50000</a:Numero><a:NumeroLinha>105</a:NumeroLinha><a:Procedure>st_MensagemErro_Negocio_R_H00</a:Procedure><a:Servidor>RJOPVSQLD01\RJODBD02</a:Servidor></a:ProcedureRaiseError></pProcedureRaiseErrorCollection></op_st_GerarBoletoCobranca_R_H00Response></s:Body></s:Envelope>');
  retorno = $(retorno);
  var dadosRetornoSucesso = retorno.find('op_st_GerarBoletoCobranca_R_H00Result');
  var dadosRetornoErro = retorno.find('pProcedureRaiseErrorCollection');
  var mensagensErro = [];

  if (dadosRetornoErro.children().length > 0) {
    $.each(dadosRetornoErro.children(), function(i, msg) {
      console.log($(msg).find("Mensagem").text());
    });
  }
});

1 个答案:

答案 0 :(得分:2)

您必须完整地选择标记:a:Mensagem而不是Mensagem。此外,您需要转义冒号,因此您的选择器应为a\\:Mensagem,即:

$(msg).find('a\\:Mensagem').text()

我怀疑这可能是由于jQuery中的选择器出错,因为这样做有用:

msg.querySelector('Mensagem').textContent

p / s:旁注,我不鼓励使用$.each()。相反,您应该将jQuery集合传递给.each()而不是:

dadosRetornoErro.children().each(function(i) {
  console.log($(this).find('a\\:Mensagem').text());
});

...或者,如果你坚持使用命名空间选择器,你将不得不使用本机JS;)

dadosRetornoErro.children().each(function(i) {
  console.log(this.querySelector('Mensagem').textContent);
});

见下面的概念验证:

$(function() {
  var retorno = $.parseXML('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><op_st_GerarBoletoCobranca_R_H00Response xmlns="http://www.capemisa.com.br/COB/st_GerarBoletoCobranca_R_H00/2017/01"><op_st_GerarBoletoCobranca_R_H00Result i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/><pProcedureRaiseErrorCollection xmlns:a="http://schemas.datacontract.org/2004/07/Capemisa.WCFService.Core" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:ProcedureRaiseError><a:Fonte>.Net SqlClient Data Provider</a:Fonte><a:Mensagem>COB.st_GerarBoletoCobranca_R_H00: A data de vencimento informada não é válida ou não foi possível verificar.</a:Mensagem><a:Numero>50000</a:Numero><a:NumeroLinha>105</a:NumeroLinha><a:Procedure>st_MensagemErro_Negocio_R_H00</a:Procedure><a:Servidor>RJOPVSQLD01\RJODBD02</a:Servidor></a:ProcedureRaiseError></pProcedureRaiseErrorCollection></op_st_GerarBoletoCobranca_R_H00Response></s:Body></s:Envelope>');
  retorno = $(retorno);
  var dadosRetornoSucesso = retorno.find('op_st_GerarBoletoCobranca_R_H00Result');
  var dadosRetornoErro = retorno.find('pProcedureRaiseErrorCollection');
  var mensagensErro = [];

  if (dadosRetornoErro.children().length > 0) {
    dadosRetornoErro.children().each(function(i) {
      console.log($(this).find('a\\:Mensagem').text());
    });
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>