0

と という 2 つの開発サイトがapi.localhostありgame.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}';
?>

リクエストの処理を妨げているものは何ですか?

4

1 に答える 1

0

同一オリジン ポリシーにより、サブドメイン間で AJAX 呼び出しを行うことができなくなります。

次の行を追加して、クロス サブドメイン リクエストを許可することができます。

document.domain = "localhost";

もう 1 つの方法は、JSONPを使用して同じオリジン ポリシーを回避することです。

于 2012-06-23T11:42:53.897 に答える