2

我在 jQuery mobile 和 PhoneGap 工作。目前正面临一个仍然存在的大问题。我搜索并应用了很多方法,但仍然存在问题。我的问题是当我在 10 秒后调用 API 时超时。所以它在 iPhone 版本中没有得到结果.. 但它在 Android 中的返回结果(在 android 的情况下它也显示超时但我得到它的结果。)

我在jQuery Ajax调用中尝试了超时方法..但是:-(

这是我的代码;

function proceed_payment(){
var cardholder_= $('#input_Cardholder_name_').val();
var card_num_ = $('#input_CreditCard_').val();
var payment_ =$('#card_type_').val();
var cvv2_=$('#input_cvv2_').val();
var url;

if(showmond_value==0)
{
    url='https://www.sample.com/json/save_pament.php?json=1& reserv_num='+reservation_number+'&callback='+reservation_carcompany+'&cardholder='+cardholder_+'&payment='+payment_+'&card_num='+card_num_+'&card_cvv2='+cvv2_+'&card_expire_mon='+expire_month+'&card_expire_year='+expire_year+'&org_deposit='+sCarDeposit+'&org_cur='+currency+'&mond='+company_Show_mond+''
}

$.ajax({  
  url:url,
  data:'',
  contentType: "application/json; charset=utf-8",
  type: "POST",
  dataType: "json",
  timeout: 15000,
  crossDomain:true,
  cache: false,
  async:false,

  success:function(data)
  { 
     alert(data.Status);
  }
}); 

};

超时屏幕截图(在 Eclipse 中检查)..

在此处输入图像描述

4

1 回答 1

1

尝试将ExternalHosts您的 iPhone 项目PhoneGap.plist文件的属性设置为将对*外部域的请求列入白名单。

您也可以尝试将以下代码添加到您的 JS 文件中,以保证 jQuery 框架在 webView 中执行时启用跨域请求。

$( document ).on( "mobileinit", function() {
    $.support.cors = true;
    $.mobile.allowCrossDomainPages = true;
});

此外,至少在早期版本的 jQuery 中存在忽略 jsonp 超时错误的问题(我认为crossDomain:true在您的$.ajax调用中设置可能会导致回退到 jQuery mobile 中的 jsonp)。所以你可以尝试使用以下插件:jQuery-JSONP

jQuery-JSONP 是一个紧凑的(1.8kB 缩小),但功能丰富的替代解决方案,可以替代 jQuery 的 JSONP 实现。

[...]

jQuery-JSONP 特性:

  • 超时机制。

这会将您的呼叫变成以下内容(注意使用$.jsonp函数而不是$.ajax

$.jsonp({
    "url": url,
    "data": "",
    "datatype": "json"
    "timeout": 15000,
    "success": function(data) {
        alert(data.Status);
    },
    "error": function(d,msg) {
        alert("Could not find user "+userId);
    }
});
于 2013-08-02T06:06:53.340 回答