PhoneGap ajax无法正常工作

时间:2018-02-10 07:06:35

标签: javascript jquery ajax cordova phonegap

我正在使用file://协议处理phoneGap应用。使用ajax时我不断收到此错误。我的服务器页面上有标题(“Access-Control-Allow-Origin:*”)。但无论如何我都无法获得ajax响应。我该怎么办?

无法加载文件:/// C:/test4/www/trackmyrunning.byethost22.com:仅支持协议方案的跨源请求:http,数据,chrome,chrome-extension,https。

    $("#b").on('click',function(){
            //pull vars 

            var username = $('#username').val();
            var password = $('#password').val();

            $.ajax({
                url: "trackmyrunning.byethost22.com",
                type: 'POST',
                success: function(data)
                {
                    $("#loginMessage").html(data);
                },
                error: function(xhr, status,error)
                {
                    alert(xhr.status + status + error);

                }

            });
            //request for username
           /* $.get("trackmyrunning.byethost22.com/index.", {user:username,pass:password}).done(function(data){
                $("#loginMessage").html(data);
            }); */

        });

我也有。我尝试修改它,没有运气。我在警报中收到的错误消息是0错误,基本上访问被拒绝做跨越原点。

2 个答案:

答案 0 :(得分:0)

我在使用手机差距和弹簧网络服务开发移动应用时面临同样的问题。

请记住,您必须传递此处缺少的用户名和密码凭据

然后设置标题

Access-Control-Allow-Origin标头是必须设置为服务器端的响应标头。也就是说,如果相应的服务器未发送此标头,则浏览器会阻止您因跨服务器(域,子域和协议)侵权而请求来自此服务器的信息。

仅当原始页面由同一服务器(域,子域和协议)提供时,它才会允许请求。

       Modify your js file like this ,

        $("#b").on('click',function(){
        //pull vars 

        var username = $('#username').val();
        var password = $('#password').val();

        $.ajax({
            url: "trackmyrunning.byethost22.com",
            type: 'POST',
            data: { username : username , password : password } ,
            headers: {
                'Access-Control-Allow-Origin': '*'
            },
            crossDomain: true,
            success: function(data)
            {
                $("#loginMessage").html(data);
            },
            error: function(xhr, status,error)
            {
                alert(xhr.status + status + error);

            }

        });

        });

如果问题仍然存在,您必须修改服务器端代码。

以下方法可以在java响应中设置标头(java后端),

try 
{ 
res.setContentType("application/json");
res.addHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "*");
res.setHeader("Access-Control-Allow-Headers", "X-Requested-      With,Host,User-Agent,Accept,Accept-Language,Accept-Encoding,Accept-Charset,Keep-Alive,Connection,Referer,Origin");
res.setHeader("Access-Control-Max-Age", "8080");
res.setCharacterEncoding("utf-8");
res.getWriter().write(response);
 } 
 catch (IOException e) 
 {

  }

下面你可以在php(后端php)中设置标题,

   header('Access-Control-Allow-Origin: *'); 
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token    , Authorization');

答案 1 :(得分:0)

您缺少的是网址的方案,在没有为网址提供方案的Phonegap应用中,使用默认网址(file:/ /)。

将您的网址更改为包含http://https://(根据您的配置)

示例:

url: "http://trackmyrunning.byethost22.com"