我正在尝试通过jquery使用web服务,但它会抛出此错误:
请求时没有'Access-Control-Allow-Origin'标头 资源。因此不允许原点'null'访问。响应 有HTTP状态代码500。
我读到它与“跨域”有关但我无法解决它。
我的代码如下所示:
<script src="js/jquery.soap.js"></script>
<script>
console.log("Entering processPeticion...");
// OBTENGO EL BARRIO A PARTIR DE LATITUD Y LONGITUD
var wsUrl = "http://gisdesa.mardelplata.gob.ar/opendata/ws.php/latlong_barrio";
var soapRequest =
'<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:open="http://192.168.0.235/opendata"><soapenv:Header/><soapenv:Body><open:latlong_barrio soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><latitud xsi:type="xsd:string">-38.001095</latitud><longitud xsi:type="xsd:string">-57.551533</longitud><token xsi:type="xsd:string">wwfe345gQ3ed5T67g4Dase45F6fer</token></open:latlong_barrio></soapenv:Body></soapenv:Envelope>';
$.ajax({
type: "POST",
url: wsUrl,
contentType: "text/xml",
dataType: "xml",
data: soapRequest,
success: processSuccess,
error: processError
});
function processSuccess(data, status, req) {
console.log("Entering processPeticion.success()...");
var barrioCodigo;
var barrioDescripcion;
var myObj = new Array();
if (status == "success"){
barrioCodigo = $(req.responseXML)
.find("latlong_barrioResponse")
.find("return")
.find("codigo").text();
console.log(barrioCodigo);
barrioDescripcion = $(req.responseXML)
.find("latlong_barrioResponse")
.find("return")
.find("descripcion").text();
console.log(barrioDescripcion);
}
}
function processError(data, status, req) {
console.log("Entering processPeticion.processError()...");
}
</script>
任何帮助?
答案 0 :(得分:0)
尝试此请求
$。AJAX({
type: "POST",
url: wsUrl,
contentType: "text/xml",
dataType: "xml",
crossDomain: true,
data: soapRequest,
success: processSuccess,
error: processError
});
答案 1 :(得分:0)
您尝试从客户端代码调用SOAP Web服务,这几乎总是一个坏主意。大多数Web服务实现从不返回Access-Control-Allow-Origin
标头,因此,由于浏览器CORS Policy,您将永远无法从客户端代码调用这些Web服务。如果您的应用程序有服务器端后端,请考虑在服务器上实现对第三方Web服务的调用,并通过JSON将响应传递给您的前端。