2011-07-22 53 views
0

我有一個小問題,以應用至極指定以下無響應:從一個jQuery Ajax請求的PHP web服務

我需要通過郵局發送到信用卡支付webservice的一些數據,所以web服務將處理信息並返回一個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/...')),然後將響應工作好的,否則在web服務(https://comercio.locaweb.com.br...)沒有響應,我等待的XML甚至不存在。

有人知道發生了什麼嗎? 或者如果我這樣做的方式不對,有人可以告訴我一種更好的方式來通過Post獲取XML發送數據嗎?

謝謝。

+1

您是否使用提琴手或類似應用程序驗證過沒有回覆?並通過查詢字符串將xml發送到另一個頁面聽起來不像我認爲的世界上最聰明的想法,但也許我錯了。 –

+0

你說得對。這不是一個好主意。 – ViniciusPires

回答

3

維尼修斯,

看起來你要使用AJAX與另一個域中運行的Web服務進行交互?瀏覽器不會允許這樣做,因爲它們在發出ajax請求時遵循Same Origin Policy

有許多方法來解決這個限制。其中之一就是在您的PHP站點上託管一個代理,爲您執行Web請求。然後,您的代碼可以將請求發送到您承載的頁面(在同源策略下允許),但您仍然可以調用所需的此服務。有這種限制可用on this page更詳細的描述,其甚至還包括sample PHP code for this proxy page.

還有一個JavaScript庫稱爲easyXDM(其維基百科文章中提到上文)。該庫將確定用於基於用戶瀏覽器執行此跨站點通信的最佳方法。有關該項目的更多信息,請訪問here。我不確定easyXDM有多廣泛使用,但我發現它確實需要在IE6-7之前在用戶的計算機上安裝閃存。這意味着,預計您的網站的任何IE 6-7用戶必須安裝Flash才能使用此付款服務(可能會導致頭痛)。

就我個人而言,我不是一個像這樣添加依賴關係的用戶依賴關係的忠實粉絲,除非必須這樣做,所以我會嘗試實現代理解決方案。

1

David Ipsen指出了同源政策。

爲了解決這個問題,你可以在你的域名上創建一個php文件,這個文件將被轉發到你想要的web服務上,並且改變你的$ post()函數來通過ajax調用服務器上的php文件。