Как вызвать внешний URL в JQuery?
Я пытаюсь разместить комментарии на стене Facebook, используя jquery.
Но мой вызов ajax не поддерживает внешний URL.
Может кто-нибудь объяснить, как мы можем использовать внешний 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.
7 ответов
Все эти ответы неверны!
Как я уже сказал в своем комментарии, причина, по которой вы получаете эту ошибку, потому что URL-адрес не соответствует " Политике того же источника", но вы все равно можете использовать функцию AJAX для попадания в другой домен, см. Ответ Ника Крейвера на этот похожий вопрос:
Вам нужно запустить поведение 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);
}
});
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>
Это проблема межсайтового скриптинга. Обычные современные браузеры не позволяют отправлять запрос на другой URL.
Я думаю, что единственный способ - использовать внутренний PHP-код, такой как MANOJ и Fernando.
curl post / get в php файле на вашем сервере -> вызвать этот php файл с помощью ajax
Файл 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>
Google Javascript же политики происхождения
Короче говоря, URL, который вы пытаетесь использовать, должен иметь тот же корень и протокол. поэтому http://yoursite.com/ не может получить доступ к https://yoursite.com/ или http://anothersite.com/
Если вы абсолютно ДОЛЖНЫ обойти эту защиту (которая, как указала Галими, на уровне браузера), рассмотрите модуль ProxyPass для вашего любимого веб-сервера.
Привет URL должен вызывать функцию, которая в ответ даст ответ
$.ajax({
url:'function to call url',
...
...
});
попробуйте использовать / вызвать API метод Facebook
Следуйте простым шагам ниже, вы сможете получить результат
Шаг 1- Создайте одну внутреннюю функцию getDetailFromExternal в своем бэкэнде. Шаг 2- В этой функции вызовите внешний URL с помощью cUrl, как показано ниже
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.