2011-01-06 10 views
24

Sto cercando di inserire commenti su Facebook wall usando jquery.Come chiamare l'URL esterno in jQuery?

Ma la mia chiamata ajax non ha autorizzato l'url esterno.

qualcuno può spiegare come possiamo utilizzare l'URL esterno con jquery?

sotto è il mio codice:

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); 
    } 
}); 

suo errore xmlhtttprequest dare.

+1

Stai diventando questo errore perché l'URL non supera il "politica di origine Same", vedi http://en.wikipedia.org/ wiki/Same_origin_policy. –

risposta

25

Tutte queste risposte sono errate!

Come ho detto nel mio commento, il motivo che stai ricevendo questo errore perché l'URL non supera il "Same origin policy", ma puoi sempre la funzione AJAX per colpire un altro dominio, vedere Nick Cravers answer on this similar question:

È necessario attivare il comportamento JSONP con $ .getJSON() aggiungendo & callback =? sul querystring, in questo modo:

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

È possibile verificare qui.

Senza usare JSONP si sta colpendo la politica stessa origine, che sta bloccando il XmlHttpRequest di ottenere tutti i dati indietro.

Con questo in mente, il codice di seguito dovrebbe funzionare:

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

Ancora non funziona. dando lo stesso errore. –

+0

$ .getJSON utilizzato per ottenere la data. Dove voglio inviare i dati sulla parete –

+0

Che testo di errore si ottiene? –

0

Hi URL deve essere chiamata una funzione che in cambio darà risposta

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

}); 

provare a utilizzare/chiamando API metodo facebook

+0

l'url non è il problema qui, la stessa politica di origine deve essere aggirata. –

3

è Cross-site scripting problema. I browser moderni più comuni non consentono di inviare richieste a un altro URL.

+11

Vuoi dire 'stessa politica di origine'. – karim79

+0

@Andrei Andrushkevich, corretto! Quindi hai qualche via d'uscita o di soluzione per questo? Voglio dire, se specificatamente si deve chiamare un altro URL, cosa si dovrebbe fare? – HarsH1610

1

google la stessa politica di origine javascript

in poche parole, l'URL che sta tentando di utilizzare devono avere la stessa radice e il protocollo. così http://yoursite.com non può accedere https://yoursite.com o http://anothersite.com

è che si deve assolutamente bypassare questa protezione (che è a livello di browser, come galimy ha sottolineato), prendere in considerazione il modulo ProxyPass per il server web preferito.

7

jQuery e PHP

Nel file PHP "contenido.php ":

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

echo file_get_contents($mURL); 
?> 

in 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> 
+0

+1, un altro modo –

+0

Ho modificato la tua risposta per rimuovere la tua firma. Si prega di consultare le faq relative alle firme e agli slogan. http://stackoverflow.com/faq#signatures – Greg

-1

seguire i seguenti passi semplici sarà in grado di ottenere il risultato

Fase 1 Creare una funzione interna getDetailFromExternal nel vostro back-end passo 2 In quella funzione chiama l'url esterno utilizzando cUrl come sotto la funzione

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; 
    } 

Passo 3- Chiama la funzione interna dal front-end utilizzando javascript/jquery Ajax.

1

Penso che l'unico modo sia usando codice PHP internel come MANOJ e Fernando suggeriscono.

Montante Flessione/entrare in file PHP sul vostro server -> chiamare questo file php con ajax

Il file PHP diciamo (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); 

che usare AJAX arrivare a

fb.php?commentmeta=your comment goes here 

dal server.

O farlo con semplice HTML e JavaScript dal server 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> 
Problemi correlati