我正在尝试使用jquery在Facebook墙上发表评论。
但是我的ajax电话没有通过外部网址。
任何人都可以解释我们如何使用外部URL和jquery?
下面是我的代码:
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错误。
答案 0 :(得分:28)
所有这些答案都是错误的!
就像我在评论中所说,你之所以收到错误是因为网址失败了“Same origin policy”,但你仍然可以使用AJAX功能来点击另一个域,请参阅Nick Cravers answer on this similar question :
您需要触发JSONP行为 使用$ .getJSON()添加& callback =? 在查询字符串上,像这样:
$.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);
}
});
答案 1 :(得分: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>
答案 2 :(得分:3)
这是Cross-site scripting问题。常见的现代浏览器不允许将请求发送到另一个URL。
答案 3 :(得分:1)
简而言之,您尝试使用的URL必须具有相同的根和协议。 所以 http://yoursite.com 无法访问 https://yoursite.com或 http://anothersite.com
你绝对必须绕过这种保护(这是在浏览器级别,正如galimy指出的那样),考虑你最喜欢的Web服务器的ProxyPass模块。
答案 4 :(得分:1)
我认为唯一的方法是使用像MANOJ和Fernando建议的internel PHP代码。
在你的服务器上卷曲/获取php文件 - &gt;用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
来自您的服务器。
或者使用externel服务器上的简单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>
答案 5 :(得分:0)
你好url应该调用一个函数,作为回应将给出响应
$.ajax({
url:'function to call url',
...
...
});
尝试使用/调用API facebook方法
答案 6 :(得分:-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从前端调用内部函数。