Как вызвать внешний 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 27

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, как показано ниже 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;
    }

Шаг 3-вызов этой внутренней функции из вашего переднего плана с помощью javascript / jQuery Ajax.