0

我已经找到了使用 jQuery 和 PhoneGap 进行 ajax 调用的工作解决方案,以获取例如简单的 json 数据。但现在我想向 CGI 程序发送一个 HTTP Post。我对所有内容进行了编码,并且在浏览器中运行良好,但是当我在我的 android 4.1 智能手机上安装 apk 文件时,我从 ajax() 调用中收到错误消息。我现在不知道该怎么办。代码看起来像这样,正如我所说,它可以在我的 PC 上的浏览​​器中运行(在 android 上的浏览​​器中,无论是 firefox 还是 android 浏览器,它都不起作用,而不是作为应用程序)。

$.ajax({
    url: "http://ip/thing.CGI",
    type: "POST",
    username: "name",
    password: "pw",
    data: params
}).always(function( data, textStatus, jqXHR ) {
    alert(textStatus + ": " + data);
});

有没有人解决这个问题?谢谢你

解决方案:

我刚刚发现我必须手动设置请求标头“授权”并使用 btoa() 对用户和密码进行编码。您必须将其添加到 ajax 设置数组中。例如,这可以工作:

$.ajax({
    url: "http://ip/thing.CGI",
    type: "POST",
    headers: {
         "Authorization" : "Basic " +  btoa("user:password")
        },
    data: params
}).always(function( data, textStatus, jqXHR ) {
    alert(textStatus + ": " + data);
});

所以这与是否调用 CGI 程序无关,而是与服务器的基本授权有关。

4

1 回答 1

0

可能不支持跨域资源共享。

启用它:

要么crossDomain: true要么$.support.cors = true

$.ajax({
    url: "http://ip/thing.CGI",
    type: "POST",
    username: "name",
    crossDomain: true,
    password: "pw",
    data: params
}).always(function( data, textStatus, jqXHR ) {
    alert(textStatus + ": " + data);
});

或者

$.ajax({
    url: "http://ip/thing.CGI",
    type: "POST",
    username: "name",
    $.support.cors = true,
    password: "pw",
    data: params
}).always(function( data, textStatus, jqXHR ) {
    alert(textStatus + ": " + data);
});
于 2013-09-28T19:17:50.170 回答