9

我正在开发一个phoneGap 应用程序。当我在浏览器中测试我的应用程序时,没有问题。一切运作良好。但是当我在涟漪中尝试它时,我的 javascript 不起作用。详细说明:用户可以登录系统,如果成功重定向到另一个页面(使用 jquery mobile),它在 chrome、internet explorer 和 firefox 中运行良好。但不适用于波纹。我的代码如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <title></title>
    <link rel="stylesheet" href="css/jquery.mobile-1.3.2.css">

    <script src="js/jquery-1.10.2.js"></script>
    <script src="js/jquery.mobile-1.3.2.js"></script>
    <script src="js/jquery.base64.js"></script>
    <script src="js/cordova.js"></script>
    <script type="text/javascript">
        $(function() {
            var credentials = 'admin:adminabc';
            var authType = "Basic " + credentials;
            $('#loginForm').submit(function() {
                $.ajax({
                    type : "GET",
                    url :  'http://localhost:30673/api/user/Get',
                    data : 'json',
                    beforeSend : function(xhr) {
                         xhr.setRequestHeader("Authorization", authType);
                    },
                    success : function(data, textStatus) {
                        $.mobile.changePage("#menu", {
                            transition : "slideup"
                        });
                    }
                });
            });

            $("#aboutUs").click(function() {
                $.ajax({
                    type : "GET",
                    url :  'http://localhost:30673/api/AboutMeWA/',
                    data : 'json',
                    beforeSend : function(xhr) {
                         xhr.setRequestHeader("Authorization", authType);
                    },
                    success : function(data, textStatus) {
                        $('#aboutMeTitle').val(data);
                    }
                });
            });
        });

        function onBodyLoad() {
            document.addEventListener("deviceready", onDeviceReady, false);

            function onDeviceReady() {
                document.addEventListener("pause", onPause, false);
                document.addEventListener("resume", onResume,  false);
            }

            function onPause() {
                alert("paused");
            }

            function onResume() {
                alert("resume");
            }

        }
    </script>
</head>
<body onload="onBodyLoad()">
    <div data-role="page" id="mainPage">
        <div data-role="header" data-theme="a" >
            <h4> Ziro </h4>
        </div>
        <div data-role="content">
            <form id="loginForm">
                <div data-role="fieldcontain">
                    <label for="textinput1"> Kullanıcı Adı:     </label>
                    <input name="" id="userName"  placeholder="username" value="" type="text">
                </div>
                <div data-role="fieldcontain">
                    <label for="textinput2"> Password</label>
                    <input name="" id="password"  placeholder="password" value="" type="password">
                </div>
                <input type="submit" data-theme="a" data- icon="arrow-r" data-iconpos="left"
                value="Login">
            </form>
            <a href="#menu" class="ui-link" data- transition="flip">Menü</a>
        </div>
        <div data-role="footer" data-theme="a"  data-position="fixed">
            <h3> FF Yazılım </h3>
        </div>

    </div>
    <div data-role="page" id="menu" data-add-back-btn="true" data-back-btn-text="Geri">
        <div data-role="header" data-theme="a" >
            <h4> Ziro Mobilya </h4>
        </div>
        <div data-role="content">
            <ul data-role="listview" data-divider-theme="a" data- inset="true">
                <li data-role="list-divider" role="heading">
                    Panel
                </li>
                <li data-theme="c">
                    <a href="#about" data-transition="flip"  id="aboutUs"> Hakkımızda </a>
                </li>
                <li data-theme="c">
                    <a href="#page1" data-transition="slide">  Referans Resimleri </a>
                </li>
                <li data-theme="c">
                    <a href="#page1" data-transition="slide"> Servis Resimleri </a>
                </li>
                <li data-theme="c">
                    <a href="#page1" data-transition="slide"> Slogan </a>
                </li>
                <li data-theme="c">
                    <a href="#page1" data-transition="slide"> İstatistikler </a>
                </li>
                <li data-theme="c">
                    <a href="#page1" data-transition="slide">  Button </a>
                </li>
            </ul>
        </div>
        <div data-role="footer" data-theme="a"  data-position="fixed">
            <h3> FF Yazılım </h3>
        </div>
    </div>

    <div data-role="page" id="about" data-add-back-btn="true" data-back-btn-text="Geri">
        <div data-theme="a" data-role="header">
            <h3> Hakkımızda </h3>
        </div>
        <div data-role="content">
            <div style="">
                <img style="width: 288px; height: 100px"  src="http://aknera.com/temp/default/images/background3.jpg">
            </div>
            <a data-role="button" data-theme="a" href="#page1" data-icon="arrow-l"
            data-iconpos="left"> Galeriden Resim Seç </a>
            <div data-role="fieldcontain">
                <label for="textinput2"> Başlık: </label>
                <input name="" id="aboutMeTitle" placeholder=""  value="" type="text" data-mini="true">
            </div>
            <div data-role="fieldcontain">
                <label for="textarea2"> Açıklama </label>
                <textarea name="" id="textarea2" placeholder=""  data-mini="true"></textarea>                                                           




            </div>
            <a data-role="button" data-theme="a" href="#page1" data-icon="alert" data-iconpos="left"> Kaydet </a>
        </div>
        <div data-role="footer" data-theme="a"  data-position="fixed">
            <h3> FF Yazılım </h3>
        </div>
    </div>
</body>
 </html>

我的应用结构如下图所示:

在此处输入图像描述

错误代码是:xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//localhost%3A30673/ap‌​i/user/Get%3Fjsonippleapi.herokuapp.com 状态代码:500 内部服务器错误 我正在从本地主机地址获取数据:localhost:30673/api/user/Get'; 它在浏览器中运行良好。并从 localhost:30673/api/user/Get 获取数据。但在涟漪中,它试图从那里获取数据:xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//localhost%3A30673/api/u‌​ser/Get%3Fjsonippleapi.herokuapp.com

需要建议的人。

4

2 回答 2

24

您可能遇到的问题是您正在使用 Ripple 的跨域代理,该代理默认在设置中打开。

跨域代理有 3 个设置:“远程”、“本地”和“禁用”。在我的情况下,我实际上不得不禁用它,但在某些情况下,您可以使用“本地”。

可能的场景:

1)您的本地应用程序在另一台服务器上的某处调用远程服务:

根据远程服务器上的配置,您可以使用“远程”或“禁用”。

2)您的本地应用程序位于“localhost”上,并且您正在调用另一个 localhost 可访问的 URL:

根据您的跨域设置等,您可以使用“本地”或“禁用”。

3)您正在运行一个本地应用程序,该应用程序调用一个服务器,该服务器也是本地的,但在一个 vm 中,或者在“localhost”上的代理无法访问它的东西:

您需要将其设置为“禁用”,并确保您的 api 服务器具有允许跨域请求的设置。最值得注意的是,您需要设置“Access-Control-Allow-Origin”标头。

于 2014-02-12T23:52:58.210 回答
2

我遇到过同样的问题。当我尝试连接到托管在IISExpress上的 WebAPI 服务时,就会发生这种情况。

在我将主机更改为本地 IIS服务器后,错误消失了,我能够使用 Ripple 连接到我的 WebAPI 服务。当然,您必须更改指向您的服务的 url(在您的情况下是http://localhost:30673)。

于 2013-09-11T13:08:07.310 回答