1

我有一本 ibook,我正试图从我的服务器上的云数据库中拉回一个数据表。如果我将 main.html 文件放在我的服务器上并使用我的网络浏览器浏览它,它就像一个返回数据表的冠军,但是当我将此 html 作为我的 main.html 文件放在 Info.plist 中时它不会在 ibook 中显示表格。我错过了什么?

这是我的 html 文件,它位于本书页面上 ibook 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

跨域资源共享 (CORS) 是一个 W3C 规范,允许从浏览器进行跨域通信。通过在 XmlHttpRequest 对象之上构建,CORS 允许开发人员使用与同域请求相同的惯用语。

CORS 的用例很简单。想象一下网站 alice.com 有一些网站 bob.com 想要访问的数据。在浏览器的同源策略下,这种类型的请求传统上是不允许的。但是,通过支持 CORS 请求,alice.com 可以添加一些特殊的响应标头,允许 bob.com 访问数据。

从这个例子可以看出,CORS 支持需要服务器和客户端之间的协调。幸运的是,如果您是客户端开发人员,您可以免受大部分这些细节的影响。本文的其余部分展示了客户端如何发出跨域请求,以及服务器如何配置自己以支持 CORS。

于 2013-01-30T02:48:25.560 回答