我有两个开发网站称为api.localhost
和game.localhost
。两者都是从旧版本的Apache运行,它与在物理服务器上运行的版本相同,因此除非必须,否则我不想更改它。我也在运行旧版本的PHP(除非必须,否则不想更新它。)
问题是如果我在api.localhost
上运行测试页面(如下所示),它可以正常工作。如果我在game.localhost
上运行相同的页面,则会失败。起初我认为失败是由于jquery.jsonrpc,这是我当时使用的,所以我简化为只使用jQuery ajax调用。我减少了index.php文件的响应,我调用了一个简单的正确的通用jsonrpc响应。实际的ajax调用来自另一个SO问题。在请求红色字符串之后,firebug控制台令人惊讶地说200 OK
并且在它下面没有响应。
我看过的事情:
的index.html
<!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>
api.localhost / index.php的
<?php
print '{"jsonrpc": "2.0", "result": 19, "id": 1}';
?>
什么阻止请求继续进行并提供服务?
答案 0 :(得分:0)
Same origin policy阻止您在子域之间进行AJAX调用。
您可以尝试添加此行以允许跨子域请求:
document.domain = "localhost";
另一种方法是使用JSONP来绕过相同的原始政策。