0

我对指定以下内容的应用程序有一点问题:

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

谢谢你。

4

2 回答 2

3

维尼修斯

看起来您正在尝试使用 ajax 与在另一个域上运行的 Web 服务进行交互?浏览器不允许这样做,因为它们在发出 ajax 请求时遵循同源策略。

有很多方法可以绕过这个限制。其中之一是在您的 PHP 站点上托管一个代理,该代理会为您执行 Web 请求。然后,您的代码可以向您托管的页面发出请求(这是同源策略允许的),但您仍然可以调用您需要的此服务。此页面上对此限制有更详细的描述,其中甚至包括此代理页面的示例 PHP 代码。

还有一个名为 easyXDM 的 JavaScript 库(在上面的 Wikipedia 文章中提到)。该库将根据用户的浏览器确定用于执行此跨站点通信的最佳方法。有关此项目的更多信息,请点击此处。我不确定easyXDM在野外的使用范围有多广,但我发现它确实需要在IE6-7之前在用户的计算机上安装闪存。这意味着您网站的任何 IE 6-7 用户都必须安装 flash 才能使用此支付服务(可能会令人头疼)。

就个人而言,除非我必须这样做,否则我不太喜欢像这样添加依赖项用户依赖项,所以我会尝试实现代理解决方案。

于 2011-07-22T18:06:34.353 回答
1

David Ipsen 指出了同源政策。

为了解决这个问题,您可以在您的域上创建一个 php 文件,该文件将卷曲到您想要的 web 服务,并更改您的 $post() 函数以通过 ajax 调用服务器上的 php 文件。

于 2011-07-22T20:15:40.213 回答