2011-01-06 10 views
24

jqueryを使用してFacebookの壁面にコメントを投稿しようとしています。jqueryで外部URLを呼び出す方法は?

しかし、私のajaxは外部URLを要求しません。

誰でもjqueryで外部URLを使用する方法を説明できますか?

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エラー:

は、以下の私のコードです。

こんにちはURLが見返りに応答

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

}); 

を与える関数を呼び出すべきである

+1

wiki/Same_origin_policy。 –

答えて

25

これらの回答はすべて間違っています。

私は、URLが「Same origin policyを」失敗したが、あなたはまだ私たち別のドメインをヒットするAJAX機能、Nick Cravers answer on this similar question見ることができるので、あなたがそのエラーを取得している理由は、私のコメントで言ったように:

を&コールバック=を追加して、$ .getJSON()でJSONPの動作 をトリガーする必要があります。このようなクエリ文字列に 、:

$.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); 
    } 
}); 
+1

まだ動作しません。同じエラーが発生します。 –

+0

$ .getJSONはdate.hereを取得するために使用されました壁にデータを投稿したい –

+0

どのようなエラーテキストが表示されますか? –

0

は、それがCross-site scripting問題であるAPIのFacebookの方法

+0

URLは問題ではありません。同じ発信元ポリシーがバイパスされます。 –

3

呼び出し/使用してみてください。最近の一般的なブラウザでは、別のURLにリクエストを送信することはできません。

+11

あなたは '同じ起源ポリシー'を意味します。 – karim79

+0

@Andrei Andrushkevich、正解! これには回避策や回避策がありますか? 具体的に別のURLを呼び出す場合、どうすればよいですか? – HarsH1610

1

一言で言えばjavascriptの同一生成元ポリシー

グーグル、使用しようとしているURLは、同じルートとプロトコルを持っている必要があります。 そう http://yoursite.comhttps://yoursite.comまたは http://anothersite.com

にアクセスすることはできません(galimyが指摘したように、ブラウザレベルである)あなたは絶対にこの保護を迂回しなければならないで、お気に入りのWebサーバー用にはProxyPassモジュールを検討します。

7

jQueryとPHP

PHPファイル「contenidoで。PHP」:HTMLで

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

echo file_get_contents($mURL); 
?> 

<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、別の方法 –

+0

あなたの署名を削除するためにあなたの答えを編集しました。署名とタグラインについてはfaqをご覧ください。 http://stackoverflow.com/faq#signatures – Greg

-1

あなたは

ステップ1-あなたのバックエンドでgetDetailFromExternalつの内部関数を作成した結果を得ることができます以下の簡単な手順に従ってください。 ステップ2-この関数では、以下のような関数を使用して外部URLを呼び出します。

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を使用してフロントエンドから内部関数を呼び出します。

1

唯一の方法は、MANOJやFernandoのようなinternelのPHPコードを使用することだと思います。

カールポスト/サーバー上のPHPファイルで入手 - >

アヤックスで、このPHPファイルを呼び出すPHPファイル(fb.php)としましょう:AJAXはにGET使用より

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

fb.php?commentmeta=your comment goes here 

あなたのサーバーから。

またはexternelサーバから簡単なHTMLとJavaScriptでこれを行う:http://en.wikipedia.org/を参照して、URLが「同一生成元ポリシーを」失敗したので、あなたはそのエラーを取得している

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>