2012-09-02 117 views
0

我Intranet上的幾臺服務器。我從一臺服務器傳遞數據以在另一臺服務器上處理。嘗試使用ajax,但我是一個noob。Ajax表單提交跨服務器

<script type="text/javascript" src="jquery-1.8.0.js"></script> 
<script type="text/javascript"> 
function print(oForm){ 

var toggle = oForm.elements["toggle"].value; 
var ticket_type_id = oForm.elements["ticket_type_id"].value; 
var printer_id = oForm.elements["printer_id"].value; 
var store_id = oForm.elements["store_id"].value; 
var data = oForm.elements["data"].value; 

var dataString = "toggle="+ toggle+ "&ticket_type_id="+ ticket_type_id+ "&printer_id="+ printer_id+ "&store_id="+ store_id+ "&data="+ data; 
$.ajax(
{ 
type:"POST", 
url:"http://192.168.12.103/crowncontrol/backend/processes/print.php", 
data:dataString, 
success: function(data){ 
alert("successful"); 
} 
} 
); 
} 
</script> 

上述URL不起作用。 但是,如果我做的網址:

"../../../backend/processes/print.php" 

這是相同的位置,它工作正常。 另外,如果我通過錨把它找它工作正常:

href="http://192.168.12.103/crowncontrol/backend/processes/print.php?etc" 

我使用AJAX的原因是,我希望我的print.php腳本與出用戶注意到運行。我無法使用url的原因:「../../../ backend/processes/print.php」是因爲我將從一臺服務器發送信息到我的Intranet上的另一臺服務器。

任何幫助,將不勝感激。我花了很長時間試圖讓它獨立工作。從答案的下面,而不是我用了整個Ajax代碼

AFTER幫助:

$.getJSON('http://192.168.12.103/crowncontrol/backend/processes/print.php?callback=?',dataString,function(res){ 
    //alert('Success'); 
}); 

也:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"> 

回答

0

這是same origin policy的結果。出於安全原因,您無法執行正常的AJAX請求跨域請求(請參閱關於相同來源策略的鏈接)。

幸運的是jQuery的包括使用腳本標記注入,而不是XMLHttpRequest的JSONP請求支援。

不是創建和使用XHR對象(XMLHttpRequest的是Ajax如何做),它創建與設置您的URL的src屬性的腳本標籤。它應該工作。

試着改變你的代碼:

$.ajax(
{ 
type:"POST", 
url:"http://192.168.12.103/crowncontrol/backend/processes/print.php?callback=?", 
data:dataString, 
success: function(data){ 
alert("successful"); 
} 
} 
); 

(?注意回調=部分)

這裏是一個jsonp tutorial for jQuery

下面是一些有關jsonp和有關same origin policy的一些信息要解決這個問題

+0

謝謝!我的原始代碼沒有太多運氣。但是你把我推向了正確的方向。結束使用:$ .getJSON('http://------/crowncontrol/backend/processes/print.php?callback =?',dataString,function(res){alert('success' ); }); – dBaker

0

簡單的方法是讓一個腳本文件在您的服務器和TH通過該服務器請求路由請求。

使用下面這樣的邏輯:

  1. 直接使得AJAX請求跨域代替,使AJAX請求到一個新的腳本您的服務器上。
  2. 在該腳本文件,獲得請求並作出所需的呼叫(到跨域地址)。
  3. 然後收到從交叉域服務器的響應,並將其發送到客戶端。
  4. 從需要數據的自己的服務器接收結果。

此圖顯示:

enter image description here