【问题标题】:Postman REST API Call To Parse Server Not Working In Javascript WebsitePostman REST API 调用解析服务器在 Javascript 网站中不起作用
【发布时间】:2017-01-22 21:59:22
【问题描述】:

我有一个托管在 Azure 上的 Parse API 服务器 (www.parse.com),我可以使用 Postman 毫无问题地调用 REST API。当我将它翻译到我的网络应用程序(使用 Postman jQuery AJAX 代码 sn-p 生成器)时,我在浏览器中收到 400(错误请求)响应。

一开始我通过postman成功调用API如下:

通过以上,我可以成功地在 Parse Server 中创建一个新用户。太好了!

接下来,我使用 Postman Generator 复制代码并收到以下输出:

  var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://myparsewebapp.azurewebsites.net/parse/classes/_User",
  "method": "POST",
  "headers": {
    "x-parse-application-id": "(My Application ID Set In The Azure CP)",
    "cache-control": "no-cache",
    "postman-token": "2a3c4ffc-b636-3ac4-bd7c-e559f7bced1b"
  },
  "data": "{\n    \"username\":\"firstuser\",\n    \"password\":\"shushitsasecret\",\n    \"email\":\"myemail@gmail.com\"\n}"
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

请注意,在我的源代码中,我删除了缓存控制和邮递员令牌标头

我将其放入我的 Angular 1 应用程序中,格式如下:

<div id="register_form" style="display: none">
    <button type="button" class="uk-position-top-right uk-close uk-margin-right uk-margin-top back_to_login" ng-click="backToLogin($event)"></button>
    <h2>Create an account</h2>
    <form id="register">
        <div class="uk-form-row">
            <label for="register-username">Username</label>
            <input id="register-username" type="text" />
        </div>
        <div class="uk-form-row">
            <label for="register-password">Password</label>
            <input id="register-password" type="password" />
        </div>
        <div class="uk-form-row">
            <label for="register-email">E-mail</label>
            <input type="text" id="register-email" />
        </div>
        <div class="uk-margin-medium-top">
            <input id="register-submit" type="submit" value="Sign Up!" />
        </div>
    </form>
</div>

然后我将数据更改为如下所示:

"data": "{\"username\":\""+name+"\",\"password\":\""+password+"\",\"email\":\""+email+"\"}",

我的完整 Javascript sn-p 如下所示:

$("#register").submit(function(event) {
                    event.preventDefault();

                    var name = $("#register-username").val();
                    var password = $("#register-password").val();
                    var email = $("#register-email").val();

                    var settings = {
                        "async": true,
                        "crossDomain": true,
                        "url": "https://myparsewebapp.azurewebsites.net/parse/classes/_User",
                        "method": "POST",
                        "headers": {
                            "x-parse-application-id": "(My Application ID Set In The Azure CP)"
                        },
                        "data": "{\"username\":\""+name+"\",\"password\":\""+password+"\",\"email\":\""+email+"\"}",
                    }
                    console.log(settings);
                    $.ajax(settings).done(function(response) {
                        console.log(response);
                    });
                });

设置的console.log输出如下:

Object
async
:
true
crossDomain
:
true
data
:
"{"username":"admin","password":"secret","email":"myemail@gmail.com"}"
headers
:
Object
x-parse-application-id
:
"(My Application ID Set In The Azure CP)"
__proto__
:
Object
method
:
"POST"
url
:
"https://myparsewebapp.azurewebsites.net/parse/classes/_User"
__proto__
:
Object

大约 1 分钟后,我得到以下响应输出:

POST https://myparsewebapp.azurewebsites.net/parse/classes/_User 400 (Bad Request)

【问题讨论】:

  • 您是否将其作为纯文本发送?可能你的服务器不明白。

标签: javascript ajax rest parse-platform postman


【解决方案1】:

如果要发送 json,则需要设置 contentType:'application/json; charset=utf-8',因为 $.ajax 的默认设置是发送表单编码请求。

除此之外,如果请求是跨域的,您还需要确保在您的 api 中启用了 CORS。 Postman 等 REST 客户端不受 CORS 限制

【讨论】:

  • 如:var settings = { contentType: 'json', "async": true, "crossDomain": true, "url": "myparsewebapp.azurewebsites.net/parse/classes/_User", "method": "POST" , "headers": { "x-parse-application-id": "myidremoved" }, "data": "{\"username\":\""+name+"\",\"password\":\" "+密码+"\",\"email\":\""+email+"\"}", }
  • 另外,当我没有从标题中删除 "cache-control": "no-cache" 时,我会收到一个 CORS 错误。
  • 所以你需要启用 cors
  • 您能详细说明一下吗?我不确定您如何(或者如果可以)在 Parse 上启用 CORS。
  • 哦,那是我的错......我推荐了错误的价值,应该知道更好
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
相关资源
最近更新 更多