0

我有两个开发站点调用api.localhostgame.localhost. 两者都是从旧版本的 Apache 运行的,它与在物理服务器上运行的相同,所以我不想更改它,除非我必须这样做。我也在运行旧版本的 PHP(除非必须,否则我不想更新它)。

问题是如果我在它上面运行一个测试页面(如下所示)api.localhost工作正常。如果我在同一页面上运行,game.localhost那么它会失败。起初我认为失败是由于我当时使用的 jquery.jsonrpc 导致的,所以我减少到只使用 jQuery ajax 调用。我将我正在调用的 index.php 文件的响应减少为一个简单正确的通用 jsonrpc 响应。实际的 ajax 调用来自另一个 SO question。萤火虫控制台出乎意料地200 OK在请求的红色字符串之后显示并且在其下方没有响应。

我看过的东西:

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

索引.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}';
?>

是什么阻止了请求继续进行并得到服务?

4

1 回答 1

0

同源策略阻止您在子域之间进行 AJAX 调用。

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

document.domain = "localhost";

另一种方法是使用JSONP绕过同源策略。

于 2012-06-23T11:42:53.897 回答