Come chiamare l'URL esterno in jquery?
-
26-09-2019 - |
Domanda
Sto cercando di inserire commenti sulla bacheca di Facebook utilizzando jquery.
Ma la mia chiamata Ajax non consente l'URL esterno.
qualcuno può spiegare come possiamo utilizzare l'URL esterno con jquery?
di seguito è riportato 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);
}
});
sta dando l'errore xmlhtttprequest.
Soluzione
Tutte queste risposte sono sbagliate!
Come ho detto nel mio commento, il motivo che stai ricevendo questo errore perché l'URL non supera il " Same politica di origine "ma è ancora possibile a noi la funzione AJAX per colpire un altro dominio, vedere Nick Cravers risposta su questa domanda simile :
È necessario innescare comportamenti JSONP con $ GetJSON () aggiungendo & callback =? in 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 criterio dell'origine che blocca XMLHttpRequest dall'ottenere qualsiasi di nuovo i dati.
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);
}
});
Altri suggerimenti
JQuery e PHP
file In 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>
Cross-site scripting problema . browser moderni comune non consente di inviare richiesta a un altro URL.
Google la stessa politica di origine javascript
in poche parole, l'URL che si sta tentando di utilizzare deve avere la stessa radice e il protocollo. così http://yoursite.com non poter accedere https://yoursite.com o http://anothersite.com
si è assolutamente MUST bypass questa protezione (che è a livello di browser, come galimy ha sottolineato), si consideri il modulo ProxyPass per il server web preferito.
Credo che l'unico modo è quello di utilizzare internel codice PHP come MANOJ e Fernando suggeriscono.
Paletto 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 utilizzare AJAX GET per
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>
L'ciao URL dovrebbe chiamare una funzione che in cambio darà una risposta
$.ajax({
url:'function to call url',
...
...
});
prova a utilizzare/chiamare il metodo API Facebook
Seguire la sottostante semplici passi sarà in grado di ottenere il risultato
Fase 1 Creare una funzione interna getDetailFromExternal nel tuo back-end. passo 2- In tale funzione chiamare l'URL esterno utilizzando cUrl come sotto 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;
}
Fase 3 chiamata quella funzione interna dal front-end utilizzando JavaScript / jQuery Ajax.