通过WordPress主题中的$ .ajax调用外部URL

时间:2010-12-28 07:54:12

标签: javascript jquery ajax wordpress wordpress-plugin

我的WordPress应用程序托管在网址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", "");  });
        });

    });

4 个答案:

答案 0 :(得分:1)

Ajax遵循相同的原始安全策略。

您可以在此处阅读:http://en.wikipedia.org/wiki/Same_origin_policy

有解决方法,包括JSONP

答案 1 :(得分:1)

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

$().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);
                }    
            });
        });

    });

答案 2 :(得分:1)

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

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

如果远程端点不提供JSONP,您需要在自己的服务器上使用代理脚本,该脚本接受AJAX请求,向外部端点发出请求,并将响应中继到您的Javascript应用程序。一定要确保这样的脚本安全,只接受对祝福端点的请求,否则你将有一个讨厌的安全漏洞来应对。

答案 3 :(得分:-1)

可能会有所帮助。

你需要通过添加&amp; 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