来自Meteor手机应用客户端的POST请求

时间:2017-07-26 18:01:15

标签: javascript ajax meteor xmlhttprequest cors

我正在尝试使用Meteor创建一个简单的移动应用程序,它将用户位置数据发送到地理空间数据库/服务器。我不确定我试图做的事情是否真的可能与Meteor或我做错了什么。

没有Meteor服务器组件,只有客户端代码。首先,我需要使用POST请求从服务器获取令牌。这在测试代码时起作用(meteor run android-device)。我可以看到令牌信息。但是当我构建Android手机应用程序时,它不起作用。我尝试了多种方法来获取令牌(AJAX POST,Meteor Http和XMLHttpRequest),所有这些都在测试时起作用。

我已经通过Meteor和CORS文档以及许多其他类似问题的帖子,但似乎无法找到解决方案。这是我第一次在这个领域工作,所以我不确定我是否遗漏了一些明显的东西,或者我在生产中是否不允许我在Meteor中做什么。

所以,

  1. 我试图在Meteor手机应用程序中不允许这样做(应用程序没有使用Meteor服务器,我工作时没有启动)?

  2. 这是一个CORS问题我处理得不好,即使我在测试时可以发帖吗?

  3. 在构建Android / iOS应用程序时,我需要做些什么吗?

  4. 问题是别的吗?

  5. 我真的不确定还有什么可看,或者如何进一步排查问题。

    感谢您的帮助!

    以下是POST请求的一些(已清理的)代码段,这些代码段在测试时是否有用。

    AJAX:

    var getToken_ajax = function() {
        var tokenData = {
            username: "theusername",
            password: "thepassword",
            f: 'json',
            expiration: 60,
            client: 'referer',
            referer: window.location.origin
        };
    
        $.ajax({
            url: "https://<address>:<port>/arcgis/tokens/generateToken",
            dataType: 'json',
            type: 'POST',
            data: tokenData,
            crossDomain: true,
            success: function(data, textStatus, jqXHR) {
                // do something
            },
            error: function(data, textStatus, jqXHR) {
                //  do something
            }
        });
    };
    

    的XMLHttpRequest:

    var getToken_XMLHttpRequest = function() {
        var tokenData = "username=theusername&password=thepassword&f=json&expiration=60&client=referer&referer=" + window.location.origin;
        var xhr = new XMLHttpRequest();
        var url = 'https://<address>:<port>/arcgis/tokens/generateToken/';
        var xhrHistoryText;
        var body = tokenData;
        function doPost() {
            if (xhr) {
                xhr.open('POST', url, true);
                xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
                xhr.setRequestHeader("Accept", "Accept:application/json, text/javascript, */*; q=0.01");
                xhr.onreadystatechange = stateChangeHandler;
                xhr.send(body);
            }
            else {
                //  do something
            }
        }
        function stateChangeHandler(evtXHR) {
            // do something
        }
        doPost();
    };
    

1 个答案:

答案 0 :(得分:0)

原来没有适当的证书。一旦到位,POST在生产中按预期工作。