jquery如何调用外部url?

发布于 2024-10-10 23:24:29 字数 491 浏览 13 评论 0原文

我正在尝试使用 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 错误。

I am trying to put comments on Facebook wall using jquery.

But my ajax call not alowing external url .

can anyone explain how can we use external url with jquery ?

below is my code :

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);
    }  
});

its giving xmlhtttprequest error.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

狼性发作 2024-10-17 23:24:30

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

正如我在评论中所说,您收到该错误的原因是该 URL 不符合“同源策略< /a>”,但您仍然可以使用 AJAX 函数来访问另一个域,请参阅 尼克·克拉弗斯回答了这个类似的问题

您需要触发 JSONP 行为
通过添加 &callback=? 与 $.getJSON() 一起使用
在查询字符串上,如下所示:

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json& ;回调=?”,
函数(数据){
    doSomethingWith(数据); 
}); 

您可以在这里进行测试。

如果不使用 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);
    }  
});

All of these answers are wrong!

Like I said in my comment, the reason you're getting that error because the URL fails the "Same origin policy", but you can still us the AJAX function to hit another domain, see Nick Cravers answer on this similar question:

You need to trigger JSONP behavior
with $.getJSON() by adding &callback=?
on the querystring, like this:

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

You can test it here.

Without using JSONP you're hitting the
same-origin policy which is blocking
the XmlHttpRequest from getting any
data back.

With this in mind, the follow code should work:

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);
    }  
});
苦行僧 2024-10-17 23:24:30

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>

JQuery and PHP

In PHP file "contenido.php":

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

echo file_get_contents($mURL);
?>

In 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>
云淡月浅 2024-10-17 23:24:30

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

it is Cross-site scripting problem. Common modern browsers doesn't allow to send request to another url.

最后的乘客 2024-10-17 23:24:30

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

在服务器上的 php 文件中curl post/get -->使用 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>

I think the only way is by using internel PHP code like MANOJ and Fernando suggest.

curl post/get in php file on your server --> call this php file with ajax

The PHP file let say (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);

Than use AJAX GET to

fb.php?commentmeta=your comment goes here

from your server.

Or do this with simple HTML and JavaScript from externel server:

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>
小忆控 2024-10-17 23:24:30

google 的 javascript 同源策略

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

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

google the javascript same origin policy

in a nutshell, the url you are trying to use must have the same root and protocol.
so
http://yoursite.com
cannot access
https://yoursite.com or
http://anothersite.com

is you absolutely MUST bypass this protection (which is at the browser level, as galimy pointed out), consider the ProxyPass module for your favorite web server.

短叹 2024-10-17 23:24:30

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

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

});

尝试使用/调用 API facebook 方法

Hi url should be calling a function which in return will give response

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

});

try using/calling API facebook method

梦幻的心爱 2024-10-17 23:24:30

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

第 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 从前端调用该内部函数。

Follow the below simple steps you will able to get the result

Step 1- Create one internal function getDetailFromExternal in your back end.
step 2- In that function call the external url by using cUrl like below function

 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;
    }

Step 3- Call that internal function from your front end by using javascript/jquery Ajax.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文