javascript - javascript 中的 POST 请求失败,但可以在 fiddler 中看到成功的响应

标签 javascript jquery ajax post fiddler

 var post_url = "https://login.salesforce.com/services/oauth2/token?code=" + callbackCode + "&grant_type=authorization_code&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_url;
            $.ajax({
                url: post_url,
                type: "POST",
                dataType: "JSON",
            }).done(function (data) {
                app.showNotification("successful post request", "asdf");
            }).fail(function (jqxhr, textStatus, error) {
               var err = textStatus + ", " + error;
               app.showNotification('failure with http POST request', err);
            });

这是我用来发送 POST 请求的代码。由于某种原因,这总是失败并显示错误消息“错误”。但是,在执行此代码时,我一直在监视 fiddler 。我清楚地收到了对 POST 请求的响应。 (不幸的是,我没有足够的声誉点数来发布图片,但如果有人想看,我可以通过电子邮件发送截图)。

我不确定这里出了什么问题。此外,我在我的代码中放置了一个断点,就在应用程序发送 ajax 请求并将 post_url 复制粘贴到 fiddler POST 请求之前,我得到了响应。有人有什么想法吗?

fiddler 中的示例响应如下所示:

{
"id":"https://login.salesforce.com/id/00D90000000vD7XEAU/00590000002jrEwAAI",
"issued_at":"1405068616953",
"scope":"full",
"instance_url":"https://ap1.salesforce.com",
"token_type":"Bearer",
"id_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjE4OCJ9.eyJleHAiOjE0MDUwNjg3MzYsInN1YiI6Imh0dHBzOi8vbG9naW4uc2FsZXNmb3JjZS5jb20vaWQvMDBEOTAwMDAwMDB2RDdYRUFVLzAwNTkwMDAwMDAyanJFd0FBSSIsImF1ZCI6IjNNVkc5WTZkX0J0cDR4cDZ0azIxU0ljV1hKU1ZEWFdPUlhZa3owX1djVF9YbmpsOV9BMVc1RHR4Z2VST0NNemd5cVVkbDBUVVVvT0JZR3czVWx1Y2IiLCJpc3MiOiJodHRwczovL2xvZ2luLnNhbGVzZm9yY2UuY29tIiwiaWF0IjoxNDA1MDY4NjE2LCJjX2hhc2giOiJzbTYzV240eVUtcVNSSXFjZGl5RzR3In0.CIGT_wWfW8otAGeKnSlmerfkpr41t5oD0djS80K32Z51O9y9_jCjYU4jJyJ3wVhRdRmuF3YXBn6_sw4waheb7FsTO4agZWikb-fOsTi8nVKQnoCYXTgJC1N93Edek9pzm1y8uONFel9P0cT1ddpVsUGSgI3LBksfJ_XJux0ichHNDuHSL2dPJlbnvOO2XOOV-tSMtXT3C8KK7FGs2LbIDDDM0vgUxC8sgGADUvDChNBDO7cuGyQDzQQphDPopeCqdA4vpShOxRq0p8ou8a0QLEbvZU8fZK0r_Nlr_pbpu9_SSf0Wk2zABU4Zo3e35yTo0EsV79qtUAD9TfJCuKMM_ULRePpmoPSydoKfFzGSHS9zk3OCAMkTTtJQLWNCx33jh6VoaiWVhh3tjjMWcz50QVsZD3S9pRVlBIOnjSgyfxa6-ROCC8IRWJR8uFTLoSOg2nfsWGKhEhATL7Q3SBaWgiDnUuau-8xpNEt_OnFT28h-8nWO6EdJPeP9ipBXs99xDFkQM70AO4jGTz8CGAxRs3cyW5UeVY88lLmzh9Kv0rbLLkFgcTjR_vCfV9WMti9s8xdoP2N-1PcGXb2G9zCEgRiPxEn9Ni0cxNTCUSM1hdFzIPtMb2GvYa0LGSfG5I2oUyWq5Dbmgwd22dYHMNftFuuRtVfRRBJgDaLufgHckGw",
"signature":"wmjZKeH4mZLi2HVp+FLfPBJfS4IajScGySAyXn5yEMs=",
"access_token":"00D90000000vD7X!AQcAQHikT0LLDqcG89y33l4l8c3hbRhGlL22OxLa1iwkQjLPFFw2c.eMYhISttcx7kjcLO_WcuMnDx4EmQ2qd_M76bX5np5a"
}

最佳答案

如果您访问的 API 在另一个域下,很可能是浏览器说“否”,因为远程服务器不允许 CORS .基本上,这是一种防止向其他域发出请求的安全机制,除非对方特别允许您使用 Access-Control-Allow-Origin header 执行此操作,我在来自 SalesForce 的响应 header ...

一个解决方案是首先通过您自己的 Controller 路由请求,避免这个问题。

关于javascript - javascript 中的 POST 请求失败,但可以在 fiddler 中看到成功的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24691866/

相关文章:

javascript - 如何获取 lightgallery youtube 缩略图?

javascript - setInterval 在导航到下一页时停止

javascript - Select2 自定义读取自定义数据属性

javascript - 如何从另一个 iFrame 中清除 iFrame 的内容

PHP 将 JSON 返回到 Ajax 仅适用于本地主机

javascript - 根据 AJAX 请求向行添加表类/删除表类

javascript - Typescript/ES7 中异步/等待的有限并行性

javascript - 卸载组件后功能如何存在

javascript - 无法使用 jquery 从 API 获取值

javascript - SignalR:在调用方法之前等待重新建立连接