0

ASP.Net CMS で PHP 関数を呼び出そうとしています。別のドメインで PHP ファイルをホストしていますが、次のエラーが発生します。

XMLHttpRequest は URL を読み込めません。オリジン URL は Access-Control-Allow-Origin で許可されていません。

header('Access-Control-Allow-Origin: *'); を追加しました。このサイトの他のスレッドのいくつかの提案に従ってPHPファイルに追加しましたが、違いはありませんでした。

これが私のコードです:

HTML

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
       $.post('http://10.254.2.54/adobe%20air/application/Pulse/data.php', {
             'text': $("#preceda").text()
        },

        function(response){

          $("#details").html(response);

         });

   }); 

</script>
</head>
<body>

<div id="preceda">
  32384
</div>

<br />
<div id="details"></div>

</body>
</html>

PHP

<?php

header('Access-Control-Allow-Origin: *');

if ( isset($_POST['text']) ){
   $q = addslashes(trim($_POST['text']));
}

// Connection script
$serverName = "***";
$uid = "***";
$pwd = "***";
$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"***");

$conn = sqlsrv_connect($serverName, $connectionInfo);

if($conn === false)
{
  echo "<error>Connect Failure</error>";
  die(print_r(sqlsrv_errors(), true));
}

function checkQuery($theQuery, $theSQL)
{
  if($theQuery === false)
  {
    echo "<error>Query Failure: ".$theSQL."</error>";
    die(print_r(sqlsrv_errors(), true));
  }
}

// Get the data
$tsql = "SELECT * FROM VG_LD_DS.dbo.VU_LearnAchievePreceda WHERE userID = '".$q."'";
$stmt = sqlsrv_query($conn, $tsql);
checkQuery($stmt, $tsql);

$i = 0;

while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
  {
    if($i == 0)
    {
      $names = array($row);
    }
    else
    {
      array_push($names, $row);
    }
    $i = 1;
  }
header('Access-Control-Allow-Origin: *');
foreach ($names as $name) {
   echo $name['telstraID'];
}

?>

これは私にとってかなり新しいものなので、アドバイスや提案をいただければ幸いです。

ありがとうございました :)

4

2 に答える 2

0

私は同じ問題を抱えていました、これが私の解決策です:

  • ドメインにphpapiとしてjsファイルを作成します。
  • <script type="text/javascript" src="path to js file"></script>タグを使用する
  • そのスクリプト内で関数を呼び出す

  • .phpと同じドメインにあるため、クロスドメイン制限の問題に遭遇することはありません;)

    于 2012-10-12T04:30:21.553 に答える
    0

    コードが実際に次の場合:

    $.post('data.php', ...
    

    その後、正常に動作するはずです。ただし、問題の説明では、代わりにこれを実行しようとしているようです。

    $.post('http://some.other.domain.com/data.php', ...
    

    これは、ブラウザーの同一生成元ポリシー(プログラマー、ユーザーのみ、さらには一部のブラウザーでのみオーバーライドできない)に違反するため、許可されていません。XMLHttpRequestは、同じドメインのURLに対してのみ作成できます。

    このための標準的な回避策は、ASPサーバーを介してリクエストをプロキシすることです。たとえば、次のようなリクエストを行います。

    $.post('data.asp', ...
    

    そして、 HTTP経由で応答をdata.aspフェッチする単なるスクリプトです。data.phpサーバー側に制限はありません。サーバーによっては、サーバー構成でプロキシまたはリダイレクトモジュールを使用することにより、スクリプトを使用せずにこれを実行することもできます。たとえば、次のようにページをプロキシするようにmod-rewriteを使用してApacheを設定できます。

    RewriteRule /data.php http://some.other.domain.com/data.php [P]
    

    スクリプトタグハック(別名jsonp、google it)など、プロキシを必要としないソリューションは他にもあります。YUIなどの一部のライブラリは、Flashモジュールを使用してブラウザーの同一生成元ポリシーをバイパスすることにより、クロスドメインajax呼び出しを実行できます。Flashには通常、同一生成元ポリシーの制限がないため、WebサイトにYouTubeビデオを埋め込むことができます。

    于 2012-10-12T04:30:41.087 に答える