0

我在 Intranet 上有几台服务器。我正在从一台服务器传递数据以在另一台服务器上处理。尝试使用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>

上面的网址不起作用。但是,如果我制作网址:

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

这是相同的位置,它工作正常。另外,如果我通过 Anchor Get 发送它,它工作正常:

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

我使用 ajax 的原因是,我希望我的 print.php 脚本在没有用户注意的情况下运行。我不能使用 url:"../../../backend/processes/print.php" 的原因是因为我会将信息从一台服务器发送到我的 Intranet 上的另一台服务器。

任何帮助,将不胜感激。我花了太长时间试图让它自己工作。

在下面的答案而不是我使用的整个 ajax 代码的帮助之后:

$.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">
4

2 回答 2

0

这是同源政策的结果。出于安全原因,您不能执行正常的 AJAX 请求跨域请求(请参阅有关同源策略的链接)。

幸运的是,jQuery 包含 JSONP 请求支持,它使用脚本标记注入而不是 XMLHttpRequest。

它不是创建和使用 xhr 对象(XMLHttpRequest 就是 ajax 的完成方式),而是创建一个脚本标记,并将 src 属性设置为您的 URL。它应该工作。

尝试将您的代码更改为:

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

(注意 ?callback=? 部分)

这是jQuery的jsonp教程

这里有一些关于jsonp的信息和一些关于同源策略的信息

于 2012-09-02T06:05:23.140 回答
0

处理此问题的简单方法是在您的服务器中创建一个脚本文件,然后通过该服务器请求路由请求。

使用以下逻辑:

  1. 不要直接向跨域发出 AJAX 请求,而是向服务器上的新脚本发出 AJAX 请求。
  2. 在该脚本文件中,获取请求并进行所需的调用(到该跨域地址)。
  3. 然后接收来自跨域服务器的响应并发送给客户端。
  4. 从您自己的具有所需数据的服务器接收结果。

该图显示:

在此处输入图像描述

于 2012-09-02T06:21:53.607 回答