我在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中检查)..
答案 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);
}
});