我遇到了一个严重的问题。首先:
通过Android设备上的cordova应用程序将Ajax调用发送到受基本身份验证和ssl保护的Windows Server(IIS,PHP)。
由于我们上次(几天前)更新了GlobalSign nv-sa证书,ajax调用在30秒后第一次尝试时获得状态0,但在第二次尝试时获得状态4和“200”(在30之后第一次点击)秒状态0 - >立即点击第二时间状态4)。旧证书的唯一区别是:新证书不再是sha1而是sha256指纹...
从第二次点击开始,每次点击都会产生4“200”而没有任何问题,但第一次总是得到0“错误”。
代码:
$.ajax({
type: "POST",
url: url,
async: asyncVar, // for Android: false - for iOS: true
username: db.getItem("user"),
password: db.getItem("pass"),
xhrFields: { withCredentials: true },
data: { forename: db.getItem("forename"), surname: db.getItem("surname"), uuid: db.getItem("uuid"), mail: db.getItem("mail"), phone: db.getItem("phone") },
dataType: "json",
success: function(data, status, object){
var body = object.responseText;
var obj = jQuery.parseJSON(body);
alert('test1: '+status + ' | ' + object.status + ' | ' + object.readyState + ' | ' + object.statusText + ' | ' + data);
//alert("test: "+obj.auth);
if(obj.auth == '1')
{
db.setItem("auth","1");
}
else
{
db.setItem("auth","0");
}
},
error: function(object, status, errorThrown){
db.setItem("auth","0");
alert('test2: '+status + ' | ' + object.status + ' | ' + object.readyState + ' | ' + object.statusText + ' | ' + errorThrown);
}
}).always(function(object, status, errorThrown){
if(db.getItem("auth") == "1")
{
$.mobile.pageContainer.pagecontainer("change","#pageLocations");
}
else
{
db.setItem("auth","0");
}
alert('test3: '+status + ' | ' + object.status + ' | ' + object.readyState + ' | ' + object.statusText + ' | ' + errorThrown);
});
代码的确切结果:
首先点击:
test2: error | 0 | 0 | error |
test3: error | 0 | 0 | error |
第二,第三等......点击:
test1: success | 200 | 4 | OK | [object Object]
test3: success | undefined | undefined | undefined | [object Object]
你知道这可能是什么原因,或者我做错了什么?
日Thnx。提前帮助你。
答案 0 :(得分:0)
好的,我现在就开始工作了。解决方案很简单:
缺少GlobalSign的中间证书,所以我们将它安装在服务器上,重新启动它并且工作正常......
源代码没有问题!只需要安装证书和中间证书。