在jQuery AJAX中10秒后API调用超时

时间:2013-08-02 05:00:26

标签: jquery jquery-mobile cordova settimeout connection-timeout

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

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

这是我的代码;

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中检查)..

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试将iPhone项目的ExternalHosts文件的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);
    }
});