1

サーバー上のクラウド内のデータベースからデータのテーブルを取得しようとしている ibook があります。サーバーに main.html ファイルを配置し、Web ブラウザーで参照すると、データのテーブルを返すチャンプのように機能しますが、この html を main.html ファイルとして Info.plist に配置すると、そうではありません。テーブルを ibook に表示します。私は何が欠けていますか?

これは、本のページのibook htmlウィジェットのウィジェットにある私のhtmlファイルです

<html>
<head>
<script type="text/javascript" src="http://myserver.com/ibook_widgets/jquery-1.7.2.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){

$.ajax({
  type: 'post',
  url: 'http://myserver.com/ibook_widgets/getdata.php?id=4',
  data: 'json',
  beforeSend: function() {
    // before send the request, displays a "Loading..." messaj in the element where the server response will be placed
    $('#resp').html('Loading...');
  },
  timeout: 10000,        // sets timeout for the request (10 seconds)
  error: function(xhr, status, error) { alert('Error: '+ xhr.status+ ' - '+ error); },
  success: function(response) { $('#listhere').html(response); }
});

});
</script>
</head>

<body>
<div id="listhere" style="border: solid black 1px; background-color:red;">Replace this text with html table from php file</div>
</body>
</html>

ここに私のサーバーにある私のphpファイルがあります

<?php

/*
 * Following code will list all the products
 */



$dbhostname='myserver.com';
$dbusername='usr';
$dbpassword='pwd';
$dbname='mydatabase';


$con = mysql_connect($dbhostname,$dbusername,$dbpassword);
mysql_select_db($dbname, $con);


// check for post data
if (isset($_POST["id"])) 
{
$inValue = $_POST['id'];



$sql = 'select id, btn_txt from mytable where parent_id = '.$inValue.' order by btn_txt';



$result = mysql_query($sql) or die(mysql_error());
if (!empty($result)) 
{
    // check for empty result
    if (mysql_num_rows($result) > 0) 
    {

        $row = mysql_fetch_array($result);


        $btntxt = $row['btn_txt'];


            $result1 = mysql_query($sql) or die(mysql_error());
            // check for empty result
            if (!empty($result1)) 
            {
                // check for empty result
                if (mysql_num_rows($result1) > 0) 
                {
                    // looping through all results
                    // products node


                    $tmpStr =  "<table border='1'><tr><th>Tap A Row To See Details</th></tr>";

                    // show select box input_select_4
                    while($row1 = mysql_fetch_array($result1))
                    {
                        $tmpStr = $tmpStr . "<tr><th><a href=\"http://myserver.com/ibook_widgets/getdata.php?id=". $row1["id"] . "\" target=\"_self\">" . $row1["btn_txt"] . "</a></th></tr>";

                    }

                    $tmpStr = $tmpStr . "</table>";

                    echo $tmpStr;
                    // echoing JSON response
                   ///echo json_encode($tmpStr);





            mysql_close($con);



                    // echoing JSON response
                   ////echo json_encode($response);


                } 
            }

        } 
    } 
}

?>

私は何が欠けていますか?

4

1 に答える 1

2

何時間もの調査の結果、CORS クロスオリジン リソース共有に関係しています。

サーバー上のphpファイルに次のヘッダー行を追加する必要があり、ビンゴはすべて機能しました。

<?php
header("Access-Control-Allow-Origin:  *");

この詳細については、ここから CORS の説明を参照してください。

http://www.html5rocks.com/en/tutorials/cors/#toc-cors-from-jquery

Cross-Origin Resource Sharing (CORS) は、ブラウザーからのクロスドメイン通信を可能にする W3C 仕様です。XmlHttpRequest オブジェクトの上に構築することで、CORS は、開発者が同じドメインの要求と同じイディオムを使用できるようにします。

CORS の使用例は単純です。サイト alice.com に、サイト bob.com がアクセスしたいデータがあるとします。このタイプのリクエストは、従来、ブラウザーの同一オリジン ポリシーでは許可されませんでした。ただし、CORS 要求をサポートすることにより、alice.com は、bob.com がデータにアクセスできるようにするいくつかの特別な応答ヘッダーを追加できます。

この例からわかるように、CORS のサポートには、サーバーとクライアントの両方の間の調整が必要です。幸いなことに、クライアント側の開発者は、これらの詳細のほとんどを知らされていません。この記事の残りの部分では、クライアントがクロスオリジン リクエストを作成する方法と、サーバーが CORS をサポートするように構成する方法を示します。

于 2013-01-30T02:48:25.560 に答える