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

时间:2014-07-11 07:03:13

标签: 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"
}

1 个答案:

答案 0 :(得分:2)

如果您要访问的API位于其他域下,则可能是浏览器显示“否”,因为远程服务器不允许CORS。基本上,这是一种安全机制,可以阻止对其他域的请求,除非另一方特别允许您使用Access-Control-Allow-Origin标头执行此操作,我在SalesForce的响应标头中看不到...

解决方案是首先通过您自己的控制器路由请求,避免此问题。

相关问题