2011-01-06 47 views
24

Tôi đang cố gắng đặt bình luận trên tường Facebook bằng cách sử dụng jquery.Làm thế nào để gọi url bên ngoài trong jquery?

Nhưng cuộc gọi ajax của tôi không phát ra url bên ngoài.

ai cũng có thể giải thích cách chúng tôi có thể sử dụng url bên ngoài với jquery?

dưới đây là mã của tôi:

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

lỗi xmlhtttprequest cho mình.

+1

Bạn đang nhận lỗi rằng vì URL không chính sách "Nguồn gốc Same", xem http://en.wikipedia.org/ wiki/Same_origin_policy. –

Trả lời

25

Tất cả các câu trả lời đều sai!

Giống như tôi đã nói trong nhận xét của tôi, lý do bạn nhận được lỗi rằng vì URL không những "Same origin policy", nhưng bạn vẫn có thể cho chúng tôi các chức năng AJAX để đạt tên miền khác, xem Nick Cravers answer on this similar question:

Bạn cần kích hoạt hành vi JSONP với $ .getJSON() bằng cách thêm & gọi lại =? trên chuỗi truy vấn, như sau:

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

Bạn có thể thử nghiệm tại đây.

Nếu không sử dụng JSONP bạn đang đánh chính sách cùng nguồn gốc đang chặn không các XMLHttpRequest từ nhận được bất kỳ dữ liệu trở lại.

Với điều này trong tâm trí, các mã tiếp theo nên làm việc:

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

Vẫn không hoạt động. đưa ra lỗi tương tự. –

+0

$ .getJSON được sử dụng để nhận ngày. Tôi muốn đăng dữ liệu lên tường –

+0

Bạn đang nhận được thông báo lỗi nào? –

0

Hi url nên được gọi một chức năng mà đổi lại sẽ cho phản ứng

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

}); 

thử sử dụng/gọi API phương pháp facebook

+0

url không phải là vấn đề ở đây, Chính sách gốc tương tự sẽ bị bỏ qua. –

3

nó là Cross-site scripting vấn đề. Các trình duyệt hiện đại phổ biến không cho phép gửi yêu cầu tới một url khác.

+11

Bạn có nghĩa là 'chính sách gốc tương tự'. – karim79

+0

@Andrei Andrushkevich, Chính xác! Vì vậy, bạn có bất kỳ cách nào để giải quyết vấn đề này không? Ý tôi là, nếu cụ thể một URL khác sẽ được gọi, bạn nên làm gì? – HarsH1610

1

google javascript chính sách cùng một nguồn gốc

trong một nutshell, url bạn đang cố gắng sử dụng phải có gốc rễ và giao thức tương tự. nên http://yoursite.com không thể truy cập https://yoursite.com hoặc http://anothersite.com

là bạn hoàn toàn PHẢI bỏ qua bảo vệ này (đó là ở cấp trình duyệt, như galimy chỉ ra), hãy xem xét các mô-đun ProxyPass cho máy chủ web ưa thích của bạn.

7

JQuery và PHP

Trong file PHP "contenido.php ":

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

echo file_get_contents($mURL); 
?> 

Trong 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, một cách khác –

+0

Tôi đã chỉnh sửa câu trả lời của bạn để xóa chữ ký của bạn. Vui lòng xem faq về chữ ký và khẩu hiệu. http://stackoverflow.com/faq#signatures – Greg

-1

Thực hiện theo các bước dưới đây đơn giản, bạn sẽ có thể nhận được kết quả

Bước 1- Tạo một chức năng nội getDetailFromExternal trong back-end của bạn bước 2- Trong chức năng đó, hãy gọi url bên ngoài bằng cách sử dụng hàm cUrl như dưới đây

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

Bước 3- Gọi hàm bên trong đó từ giao diện người dùng của bạn bằng cách sử dụng Ajax/jquery Ajax.

1

Tôi nghĩ cách duy nhất là sử dụng mã PHP nội bộ như MANOJ và Fernando đề xuất.

curl bài/nhận được trong tập tin php trên máy chủ của bạn -> gọi file php này với ajax

Các file PHP để nói (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); 

Thần sử dụng AJAX GET để

fb.php?commentmeta=your comment goes here 

từ máy chủ của bạn.

Hoặc làm điều này với HTML đơn giản và JavaScript từ externel server:

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> 
Các vấn đề liên quan