Как вызвать внешний url в jquery?
Я пытаюсь разместить комментарии на стене Facebook с помощью jquery.
Но мой ajax вызов не alowing внешний 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, чтобы попасть в другой домен, см. ответ Nick Cravers на этот аналогичный вопрос :
Вам нужно вызвать поведение 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.
Google javascript же origin policy
Короче говоря, url-адрес, который вы пытаетесь использовать, должен иметь тот же корень и протокол. так http://yoursite.com не удается получить доступ https://yoursite.com или http://anothersite.com
Вы абсолютно обязаны обойти эту защиту (которая находится на уровне браузера, как указал галими), рассмотрим модуль ProxyPass для вашего любимого веб-сервера.
Я думаю, что единственный способ-это использовать внутренний PHP-код, как предлагают маной и Фернандо.
Curl post / get in php file на вашем сервере -- > вызовите этот 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 to
fb.php?commentmeta=your comment goes here
С вашего сервера.
Или сделайте это с помощью простых HTML и JavaScript из 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>
Hi url должен вызывать функцию, которая в свою очередь даст ответ
$.ajax({ url:'function to call url', ... ... });
Попробуйте использовать / вызывать API facebook method
Выполните следующие простые шаги, вы сможете получить результат
Шаг 1-Создайте одну внутреннюю функциюgetDetailFromExternal в вашем бэк-энде. Шаг 2-в этой функции вызовите внешний url, используя cUrl, как показано ниже functionfunction 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.