没有jQuery Ajax请求对PHP Webservice的响应

时间:2011-07-22 17:58:03

标签: php jquery ajax web-services ajax-request

我对应用程序有一点问题,具体如下:

我需要通过邮寄方式向信用卡付款网络服务发送一些数据,因此网络服务将获取信息并返回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发送数据吗?

谢谢。

2 个答案:

答案 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文件。