我对应用程序有一点问题,具体如下:
我需要通过邮寄方式向信用卡付款网络服务发送一些数据,因此网络服务将获取信息并返回XML。
我以为我可以用$.post()
jQuery Ajax方法做到这一点。
那是我的代码:
$.post("https://comercio.locaweb.com.br/comercio.comp", {
identificacao: dadosPagamento[0],
modulo: dadosPagamento[1],
operacao: dadosPagamento[2],
ambiente: dadosPagamento[3],
bin: dadosPagamento[4],
idioma: dadosPagamento[5],
valor: dadosPagamento[6],
pedido: dadosPagamento[7],
descricao: dadosPagamento[8],
bandeira: dadosPagamento[9],
forma_pagamento: dadosPagamento[10],
parcelas: dadosPagamento[11],
autorizar: dadosPagamento[12],
capturar: dadosPagamento[13]
},
function(data) {
alert(data);
window.open('../negocio/index.php?mod=cliente&acao=gambs&xml=' + encodeURI(data));
$('#resultadoFinal').html(data);
}
);
警报(数据)我只是用来测试响应,问题是:
我将它发送到本地测试文件(@ window.open('../negocio/...')
),然后响应正常,否则在webservice(https://comercio.locaweb.com.br...
)中没有响应,我正在等待的XML甚至没有存在。
有人知道发生了什么吗? 或者,如果我这样做的方式不对,有人可以通过Post告诉我更好的方式来获取XML发送数据吗?
谢谢。
答案 0 :(得分:3)
维尼,
看起来您正在尝试使用ajax与在另一个域上运行的Web服务进行交互?浏览器不会允许这样做,因为它们在发出ajax请求时会遵循Same Origin Policy。
有许多方法可以解决这个限制。其中一个是在PHP站点上托管代理,为您执行Web请求。然后,您的代码可以将请求作为您托管的页面(在同源策略下允许),但您仍然可以调用所需的此服务。有关此限制的详细说明on this page甚至包括sample PHP code for this proxy page.
还有一个名为easyXDM的JavaScript库(在上面的维基百科文章中提到过)。此库将确定用于基于用户的浏览器执行此跨站点通信的最佳方法。有关此项目的更多信息,请访问here。我不确定easyXDM是如何广泛使用的,但我发现它确实需要在IE6-7之前在用户的计算机上安装闪存。这意味着,您的网站的任何IE 6-7用户都必须安装闪存才能使用此付款服务(可能会让您头疼)。
就个人而言,除非必须,否则我不喜欢添加像这样的依赖项用户依赖项,所以我会尝试实现代理解决方案。
答案 1 :(得分:1)
David Ipsen指出同源政策。
为了解决这个问题,您可以在您的域上创建一个php文件,该文件将卷曲到您想要的Web服务,并更改您的$ post()函数以通过ajax调用服务器上的php文件。