【问题标题】:Simple HTTP GET not working with https to get JSON简单的 HTTP GET 不使用 https 来获取 JSON
【发布时间】:2015-09-15 14:07:29
【问题描述】:

我有这个使用 AngularJS 和 Onsen UI 构建的可工作的 PhoneGap 应用程序,它访问一个 PHP 文件,它在响应中获取一些数据。 php 文件位于具有简单 http 的域上,但现在我将其移至支持 https 的域,我不断遇到一些奇怪的问题。

我尝试了 AngularJS 异步获取数据的方式,还有一个 ajax 调用。

$http.get('https://blablabla.com/file.php?parameters').then(function(response) {
        //SUCCESS
        alert(response);
        var z = response;
    },function(response) {
        alert("Failed");
});

它进入了 SUCCESS 部分,但我在其中的数据不正确。它应该是一个字符串(一个普通的 JSON 字符串,我会对其进行字符串化并转换为一个 json 对象)

ajax调用如下:

function httpGet(theUrl) {
    var dataToReturn;
    $.ajax({
        type: 'GET',
        url: theUrl,
        cache: false,
        async: false,
        data: "",
        success: function(data, textStatus, result) {
            dataToReturn = data;
        },
        error: function (result, textStatus, errorThrown) {
            alert("Failed to get response from server!");
        }
    });

    return dataToReturn;
    //var xmlHttp = new XMLHttpRequest();
    //xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
    //xmlHttp.send( null );
    //return xmlHttp.responseText;
};

我基本上是从 PhoneGap 应用程序调用 https 中的 php 脚本。 如果我将地址更改为 http,它可以完美运行...

我还希望您注意,PhoneGap 基本上创建了某种本地代理。不过,我不确定如何详细说明...

任何关于如何解决这个问题的想法,以获得与地址简单“http”时相同的数据?

【问题讨论】:

  • 您可能需要检查 PhoneGap 代理是否在端口 443 上工作。听起来它已经在端口 80 上工作,因为那里没有问题。 Https 使用端口 443,因此请确保将代理配置为在两个端口上工作。
  • 您可能想阅读Same origin policy
  • 您能否在问题中包含为 HTTP 和 HTTPS 返回的数据样本?另外,您是否尝试过使用浏览器网络工具或 Fiddler 之类的工具来检查请求?

标签: javascript php json ajax angularjs


【解决方案1】:

Angular 会自动转换 json,如果您从 PHP 服务器端设置正确的标头会更好:

header('Content-Type: application/json');

就在回声之前。

第二个你的 get 好像少了一个括号

$http.get('https://blablabla.com/file.php?parameters')
    .then(function(response) {
        //SUCCESS
        alert(response);
        var z = response;
    },function(response) {
        alert("Failed");
    });

第三,响应不再直接响应,而是response.data 所以你可能想试试

alert(response.data);
var z = response.data;

警告!这取决于您的 Angular.js 版本有很大差异

有几种不同的语法可用于 $http 对象,具体取决于您使用的 Angular 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多