web-dev-qa-db-fra.com

Comment appeler une URL externe dans jquery?

J'essaie de mettre des commentaires sur le mur Facebook en utilisant jquery.

Mais mon appel ajax ne laisse pas l'URL externe.

quelqu'un peut-il expliquer comment utiliser une URL externe avec jquery?

ci-dessous est mon 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);
    }  
});

son erreur xmlhtttprequest donnant.

32
user319198

Toutes ces réponses sont fausses!

Comme je l'ai dit dans mon commentaire, la raison pour laquelle vous obtenez cette erreur car l'URL échoue à la " même politique d'origine ", mais vous pouvez toujours nous utiliser la fonction AJAX pour frapper un autre domaine, voir Nick Cravers répond à cette question similaire :

Vous devez déclencher le comportement JSONP avec $ .getJSON () en ajoutant & callback =? sur la chaîne de requête, comme ceci:

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

Vous pouvez le tester ici.

Sans utiliser JSONP, vous utilisez la même politique d'origine qui empêche XmlHttpRequest de récupérer des données.

Dans cet esprit, le code suivant devrait fonctionner:

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);
    }  
});
28
Ben Everard

JQuery et PHP

Dans PHP fichier "contenido.php":

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

echo file_get_contents($mURL);
?>

En 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>
7
Fernando

c'est Cross-site scripting problem. Les navigateurs modernes courants ne permettent pas d'envoyer une demande à une autre URL.

3

Je pense que la seule façon est d'utiliser internel PHP code comme le suggèrent MANOJ et Fernando.

curl post/get dans le fichier php sur votre serveur -> appelez ce fichier php avec ajax

Le fichier PHP disons (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);

Utilisez ensuite AJAX GET to

fb.php?commentmeta=your comment goes here

depuis votre serveur.

Ou faites-le avec du simple HTML et JavaScript depuis un serveur externel:

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>
1
Atanas Atanasov

google la même politique d'origine javascript

en un mot, l'url que vous essayez d'utiliser doit avoir la même racine et le même protocole. donc http://votresite.com ne peut pas accéder https://votresite.com ou http://anothersite.com

si vous DEVEZ absolument contourner cette protection (qui est au niveau du navigateur, comme l'a souligné Galimy), pensez au module ProxyPass pour votre serveur Web préféré.

1
ebaum

Salut url devrait appeler une fonction qui en retour donnera une réponse

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

});

essayez d'utiliser/d'appeler la méthode facebook de l'API

0
lampdev