Jquery 两个测试站点,ajax只在一个站点上工作
我有两个开发站点调用Jquery 两个测试站点,ajax只在一个站点上工作,jquery,Jquery,我有两个开发站点调用api.localhost和game.localhost。两者都是从Apache的旧版本运行的,该版本与在物理服务器上运行的版本相同,因此我不想更改它,除非我必须更改它。我还运行了一个旧版本的PHP(我也不想更新它,除非我必须更新) 问题是,如果我在api.localhost上运行一个测试页面(如下所示),它就可以正常工作。如果我在game.localhost上运行相同的页面,那么它会失败。起初我认为失败是由于jquery.jsonrpc造成的,这是我当时使用的,所以我只使用
api.localhost
和game.localhost
。两者都是从Apache的旧版本运行的,该版本与在物理服务器上运行的版本相同,因此我不想更改它,除非我必须更改它。我还运行了一个旧版本的PHP(我也不想更新它,除非我必须更新)
问题是,如果我在api.localhost
上运行一个测试页面(如下所示),它就可以正常工作。如果我在game.localhost
上运行相同的页面,那么它会失败。起初我认为失败是由于jquery.jsonrpc造成的,这是我当时使用的,所以我只使用jquery ajax调用。我将调用的index.php文件的响应简化为一个简单正确的通用jsonrpc响应。实际的ajax调用来自另一个SO问题。firebug控制台在请求的红色字符串之后意外地说200OK
,但下面没有响应
我所看到的事情:
- 两个站点上都有相同版本的jquery
- 虚拟主机看起来不错。它们的不同之处在于错误日志文件名不同
- 除了许多favicon错误外,错误日志中没有任何内容
- 主机文件看起来不错。没有什么不寻常的
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>test</title>
<head>
<body>
<script type="text/javascript" src="jquery.js"></script>
<script>
$(document).ready(function() {
$.ajax({
url: 'http://api.localhost/index.php',
data: JSON.stringify({jsonrpc:'2.0',method:'add', params:[1400,2100],id:"jsonrpc"}), // id is needed !!
type:"POST",
dataType:"json",
success: function (result) {
alert("ok");
},
error: function (err,status,thrown) {
alert ("this syntax sucks!! " + " ERROR: " + err + " STATUS: " + status + " " + thrown );
},
complete: function (xhr,status) {
alert('Complete=> showing status as: '+ status);
data = $.parseJSON(xhr.responseText);
alert (data);
}
});
});
</script>
test
</body>
</html>
测试
$(文档).ready(函数(){
$.ajax({
网址:'http://api.localhost/index.php',
数据:JSON.stringify({jsonrpc:'2.0',方法:'add',参数:[14002100],id:'jsonrpc'}),//需要id!!
类型:“POST”,
数据类型:“json”,
成功:函数(结果){
警报(“正常”);
},
错误:函数(错误、状态、抛出){
警报(“此语法糟透了!!“+”错误:“+err+”状态:“+STATUS+”+”+抛出);
},
完成:函数(xhr,状态){
警报(“完成=>显示状态为:”+状态);
data=$.parseJSON(xhr.responseText);
警报(数据);
}
});
});
测试
api.localhost/index.php
<?php
print '{"jsonrpc": "2.0", "result": 19, "id": 1}';
?>
是什么阻止了请求的进行和服务?阻止您在子域之间进行AJAX调用
您可以尝试添加此行以允许跨子域请求:
document.domain = "localhost";
另一种方法是使用相同的源代码策略。在实时服务器上也可以吗?这种方法的缺点是什么?没有生成响应-甚至没有失败消息。CORS似乎是一条出路。