【问题标题】:Call external url through $.ajax in WordPress theme在 WordPress 主题中通过 $.ajax 调用外部 url
【发布时间】:2010-12-28 07:54:12
【问题描述】:

我的 WordPress 应用程序托管在 url http://127.0.0.1/wordpress/ 上,我在 WordPress 标头中添加了以下脚本以获取一些令牌,但它没有提供任何令牌

我复制了那个 url (http://127.0.0.1:8090/sample/sample/getToken) 并在新选项卡中打开它成功返回令牌但是当我使用 $.ajax 调用它时它不返回我令牌

  <script>   
   $().ready(function(){
      $("#signIn").click(function(){
                    alert("Display Alert Properly");
            $.ajax({ 
            type: "POST",
            url: "http://127.0.0.1:8090/sample/sample/getToken",
            contentType: "text/html",
            success: function(token)  { 
                window.open("https://api.linkedin.com/uas/oauth/authorize?oauth_token=" + token, "_self", "");  });
        });

    });

【问题讨论】:

    标签: javascript jquery ajax wordpress


    【解决方案1】:

    由于在现代浏览器中实现了Same Origin Policy,您无法通过 Javascript 直接访问外部资源。但是,有几个解决方案。

    如果远程站点提供JSONP,您可以利用它来加载外部资源,但如果它们不提供,您将无法直接访问这些资源。

    如果远程端点不提供 JSONP,您需要在自己的服务器上安装一个代理脚本,该脚本接受 AJAX 请求,向外部端点发出请求,并将响应中继到您的 Javascript 应用程序。请务必妥善保护此类脚本,使其仅接受对受祝福的端点的请求,否则您将面临一个令人讨厌的安全漏洞。

    【讨论】:

      【解决方案2】:

      Ajax 遵循同源安全策略。

      你可以在这里阅读:http://en.wikipedia.org/wiki/Same_origin_policy

      有解决方法,包括 JSONP

      【讨论】:

        【解决方案3】:

        试试这个,看看你得到了什么错误,它会帮助你看到实际的问题

        $().ready(function(){
              $("#signIn").click(function(){
                            alert("Display Alert Properly");
                    $.ajax({ 
                    type: "POST",
                    url: "http://127.0.0.1:8090/sample/sample/getToken",
                    contentType: "text/html",
                    success: function(token)  { 
                        window.open("https://api.linkedin.com/uas/oauth/authorize?oauth_token=" + token, "_self", "");  
                    },
                    error:function (xhr, ajaxOptions, thrownError){
                            alert(xhr.statusText);
                            alert(thrownError);
                        }    
                    });
                });
        
            });
        

        【讨论】:

          【解决方案4】:

          也许这会有所帮助。

          您需要通过添加 &callback= 来使用 $.getJSON() 触发 JSONP 行为?在查询字符串上,像这样:

          $.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&callback=?",
          function(data) {
              doSomethingWith(data); 
          }); 
          

          参考Ben Everard's answer

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-16
            • 1970-01-01
            • 1970-01-01
            • 2013-08-30
            • 1970-01-01
            • 2018-09-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多