2011-01-06 23 views
24

Estoy tratando de poner comentarios en la pared de Facebook usando jquery.Cómo llamar a una URL externa en jquery?

Pero mi llamada ajax no deja de url externa.

¿alguien puede explicar cómo podemos usar la URL externa con jquery?

a continuación es mi código:

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

su error xmlhtttprequest dar.

+1

Usted está consiguiendo que el error debido a la URL falla la "política de mismo origen", véase http://en.wikipedia.org/ wiki/Same_origin_policy. –

Respuesta

25

¡Todas estas respuestas son incorrectas!

Como he dicho en mi comentario, la razón por la que está recibiendo ese error porque la URL falla la "Same origin policy", pero todavía se puede nos la función AJAX para golpear a otro dominio, consulte Nick Cravers answer on this similar question:

Necesita activar el comportamiento JSONP con $ .getJSON() agregando & callback =? en la cadena de consulta, así:

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

Puede probar aquí.

Sin utilizar JSONP que está golpeando la política mismo origen que está bloqueando el XmlHttpRequest de conseguir cualquier dato espalda.

Con esto en mente, el código de seguimiento debería funcionar:

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

Todavía no funciona. dando el mismo error –

+0

$ .getJSON utilizado para obtener la fecha.aquí quiero publicar datos en la pared –

+0

¿Qué texto de error está recibiendo? –

0

Hola url debe estar llamando a una función que a su vez dará respuesta

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

}); 

tratar de usar/llamar a la API método facebook

+0

la url no es el problema aquí, la misma política de origen debe omitirse. –

3

es Cross-site scripting problema. Los navegadores modernos comunes no permiten enviar solicitudes a otra url.

+11

Te refieres a 'la misma política de origen'. – karim79

+0

@Andrei Andrushkevich, ¡Correcto! Entonces, ¿tiene alguna salida o solución alternativa para esto? Es decir, si específicamente se llamará a otra URL, ¿qué debería hacer uno? – HarsH1610

1

google el javascript política del mismo origen

en pocas palabras, la URL que está intentando utilizar debe tener la misma raíz y el protocolo. por lo http://yoursite.com no pueden acceder a https://yoursite.com o http://anothersite.com

es que es absolutamente necesario pasar por alto esta protección (que es a nivel del navegador, como se señaló galimy), considere el módulo ProxyPass para su servidor web favorito.

7

jQuery y PHP

En archivo PHP "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> 
+0

+1, otra forma –

+0

He editado su respuesta para eliminar su firma. Por favor, consulte las preguntas frecuentes sobre firmas y eslóganes. http://stackoverflow.com/faq#signatures – Greg

-1

siga los siguientes pasos simples que usted será capaz de obtener el resultado

Paso 1- Crear una función interna getDetailFromExternal en su extremo posterior . paso 2- En esa función, llame a la url externa usando cUrl como la función siguiente

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

Paso 3- Llame a esa función interna desde su interfaz usando javascript/jquery Ajax.

1

Creo que la única manera es mediante el uso de código PHP internel como lo sugieren MANOJ y Fernando.

posterior rizo/ponerse en archivo PHP en su servidor -> llamar a este archivo PHP con el Ajax

El archivo PHP dejó decir (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); 

que el uso de AJAX llegar a

fb.php?commentmeta=your comment goes here 

de su servidor.

O hacer esto con una simple HTML y JavaScript desde un servidor 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> 
Cuestiones relacionadas