两个测试站点,ajax仅适用于一个

时间:2012-06-23 11:32:58

标签: jquery

我有两个开发网站称为api.localhostgame.localhost。两者都是从旧版本的Apache运行,它与在物理服务器上运行的版本相同,因此除非必须,否则我不想更改它。我也在运行旧版本的PHP(除非必须,否则不想更新它。)

问题是如果我在api.localhost上运行测试页面(如下所示),它可以正常工作。如果我在game.localhost上运行相同的页面,则会失败。起初我认为失败是由于jquery.jsonrpc,这是我当时使用的,所以我简化为只使用jQuery ajax调用。我减少了index.php文件的响应,我调用了一个简单的正确的通用jsonrpc响应。实际的ajax调用来自另一个SO问题。在请求红色字符串之后,firebug控制台令人惊讶地说200 OK并且在它下面没有响应。

我看过的事情:

  • 两个网站都有相同版本的jquery。
  • 虚拟主机看起来不错。它们仅在错误日志文件名不同的方面有所不同。
  • 除了很多favicon错误外,错误日志中没有任何内容。
  • hosts文件看起来没问题。没有什么不寻常的。

的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}';
?>

什么阻止请求继续进行并提供服务?

1 个答案:

答案 0 :(得分:0)

Same origin policy阻止您在子域之间进行AJAX调用。

您可以尝试添加此行以允许跨子域请求:

document.domain = "localhost";

另一种方法是使用JSONP来绕过相同的原始政策。