小编典典

PhoneGap Ajax调用每次都会失败

ajax

我正在使用 PhoneGap 开发移动应用程序,并且必须 从另一个项目 访问某些 服务 。我正在使用
jquery-2.0.0.jsjquery-mobile-1.3.2.js

$.ajax({
            url: 'http://localhost:62465/api/account?email=johndoe@yahoo.com',
            dataType: 'json',
            success: function (data) {
                alert(data.Name);
            },
            error: function (xhr, type) {
                alert("Failed to load data");
                alert(xhr + " " + type);
            }
});

这个ajax调用每次都会失败。在 config.xml中, 我有以下几行:<access origin="*" />

我可能在哪里错了!


阅读 294

收藏
2020-07-26

共1个答案

小编典典

问题在于您的phonegap应用程序正在从非网络服务器请求本地文件。本地文件交付时没有HTTP头-这意味着没有“ 200 OK”头,也没有“ 404 Not
Found”错误。因此,假定状态码为0。

直接的javascript XHR将需要忽略状态并在readystate == 4(完成并准备就绪)上执行操作。像这样:

    var myrequest = new XMLHttpRequest();
    myrequest.open('GET','localfile.html');
    myrequest.onreadystatechange = function(){
        if(myrequest.readyState == 4) {
            var result = myrequest.responseText;
        }
    }
    myrequest.send();

在MooTools中,在Request类中实现更改后的状态测试是一项相对简单的任务-将返回码测试更改为也接受0表示为true。像这样:

Request.implement({
    isSuccess: function(){
        var status = this.status;
        return ((status >= 200 && status < 300) || status === 0);
    }
});

jQuery ....关于jQuery,我想谈一谈-但我会坚持,因为这似乎是一个优雅的地方。

要为状态== 0准备jQuery,您需要使用always事件而不是success事件,您可以在那里测试状态代码。

$.ajax({
   url: '/echo/html/',
   type: 'PUT',
   data: "email=a@b.com"
 }).always(function(data, textStatus, jqXHR){
   switch(textStatus) {
     case 200:
         case 0:
         alert('Success.');
             break;
         case 404:
             alert('oops');
             break;
   }
 });

Cordova / Phonegap中的Ajax-是的!

2020-07-26