我在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());
});
}
});
答案 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>