32

我正在尝试使用 jquery 在 Facebook 墙上发表评论。

但是我的 ajax 调用不允许外部 url 。

谁能解释我们如何在 jquery 中使用外部 url?

下面是我的代码:

var fbUrl="https://graph.facebook.com/16453004404_481759124404/comments?access_token=my_token";

$.ajax({        
    url: fbURL ,
    data: "message="+commentdata,
    type: 'POST',
    success: function (resp) {
        alert(resp);
    },
    error: function(e){
        alert('Error: '+e);
    }  
});

它给出了 xmlhtttprequest 错误。

4

7 回答 7

27

所有这些答案都是错误的!

就像我在评论中所说的那样,您之所以收到该错误是因为 URL 未能通过“同源策略”,但您仍然可以使用 AJAX 函数来访问另一个域,请参阅Nick Cravers 对这个类似问题的回答

您需要通过添加 &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); 
}); 

你可以在这里测试它。

如果不使用 JSONP,您将遇到阻止 XmlHttpRequest 取回任何数据的同源策略。

考虑到这一点,以下代码应该可以工作:

var fbURL="https://graph.facebook.com/16453004404_481759124404/comments?access_token=my_token";

$.ajax({
    url: fbURL+"&callback=?",
    data: "message="+commentdata,
    type: 'POST',
    success: function (resp) {
        alert(resp);
    },
    error: function(e) {
        alert('Error: '+e);
    }  
});
于 2011-01-06T09:54:08.627 回答
7

jQuery 和 PHP

在 PHP 文件“contenido.php”中:

<?php
$mURL = $_GET['url'];

echo file_get_contents($mURL);
?>

在 html 中:

<script type="text/javascript" src="js/jquery/jquery.min.js"></script>
<script type="text/javascript">
    function getContent(pUrl, pDivDestino){
        var mDivDestino = $('#'+pDivDestino);

        $.ajax({
            type : 'GET',
            url : 'contenido.php',
            dataType : 'html',
            data: {
                url : pUrl
            },
            success : function(data){                                               
                mDivDestino.html(data);
            }   
        });
    }
</script>

<a href="#" onclick="javascript:getContent('http://www.google.com/', 'contenido')">Get Google</a>
<div id="contenido"></div>
于 2012-07-31T18:36:27.270 回答
3

这是跨站点脚本问题。常见的现代浏览器不允许向另一个 url 发送请求。

于 2011-01-06T09:13:37.520 回答
2

我认为唯一的方法是使用像 MANOJ 和 Fernando 建议的内部 PHP 代码。

curl 发布/获取服务器上的 php 文件 --> 使用 ajax 调用此 php 文件

PHP文件让我们说(fb.php):

$commentdata=$_GET['commentdata'];
$fbUrl="https://graph.facebook.com/16453004404_481759124404/comments?access_token=my_token";
curl_setopt($ch, CURLOPT_URL,$fbUrl);
curl_setopt($ch, CURLOPT_POST, 1);
// POST data here
curl_setopt($ch, CURLOPT_POSTFIELDS,
        "message=".$commentdata);

// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);
echo $server_output;
curl_close ($ch);

比使用 AJAX GET 来

fb.php?commentmeta=your comment goes here

从你的服务器。

或者使用来自外部服务器的简单 HTML 和 JavaScript 执行此操作:

Message: <input type="text" id="message">
<input type="submit" onclick='PostMessage()'>
<script>
function PostMessage() {
var comment = document.getElementById('message').value;
    window.location.assign('http://yourdomain.tld/fb.php?commentmeta='+comment)
}
</script>
于 2017-09-08T08:45:54.683 回答
1

google javascript 同源策略

简而言之,您尝试使用的 url 必须具有相同的根和协议。所以 http://yoursite.com 无法访问 https://yoursite.comhttp://anothersite.com

您是否绝对必须绕过此保护(正如 galimy 指出的那样,这是在浏览器级别),请考虑为您最喜欢的 Web 服务器使用 ProxyPass 模块。

于 2011-01-06T09:17:59.067 回答
0

嗨 url 应该调用一个函数,该函数作为回报会给出响应

$.ajax({
url:'function to call url',
...
...

});

尝试使用/调用 API facebook 方法

于 2011-01-06T09:13:21.967 回答
-1

按照以下简单的步骤,您将能够得到结果

第 1 步 -在后端创建一个内部函数getDetailFromExternal 。第 2 步- 在该函数中,使用 cUrl 调用外部 url,如下面的函数

 function getDetailFromExternal($p1,$p2) {

        $url = "http://request url with parameters";
        $ch = curl_init();
        curl_setopt_array($ch, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true            
        ));

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $output = curl_exec($ch);
        curl_close($ch);
        echo $output;
        exit;
    }

第 3 步 - 使用 javascript/jquery Ajax 从前端调用该内部函数。

于 2017-05-05T05:33:49.567 回答