2009-07-20 35 views
21

Cả:jquery ajax get responseText từ http url

var response = $.ajax({ 
    type: "GET", 
    url: "http://www.google.de", 
    async: false, 
    success : function() { 
     alert (this); 
    } 
}); 

Cũng:

var response2 = $.get("http://www.google.de", function(data) { 
    alert("Data Loaded: " + data); 
}); 

cho tôi một đối tượng. Làm cách nào để tôi có quyền truy cập vào số responseText?

Trả lời

3

trong các chức năng ajax jquery, chữ ký thành công callback là:

function (data, textStatus) { 
    // data could be xmlDoc, jsonObj, html, text, etc... 
    this; // the options for this ajax request 
} 

tùy thuộc vào loại dữ liệu bạn đã yêu cầu, sử dụng tham số 'datatype', bạn sẽ nhận được các lập luận 'dữ liệu'.

từ tài liệu:

kiểu dữ liệu (Chuỗi) Mặc định: Intelligent Guess (xml hoặc html). Loại dữ liệu bạn đang đợi từ máy chủ. Nếu không có quy tắc nào được chỉ định, jQuery sẽ thông minh trả lời responseXML hoặc responseText về cuộc gọi lại thành công của bạn, dựa trên kiểu phản hồi MIME.

Các loại có sẵn (và kết quả thông qua như là đối số đầu tiên để gọi lại thành công của bạn) là:

"xml": Trả về một tài liệu XML có thể được xử lý qua jQuery.

"html": Trả về HTML dưới dạng văn bản thuần túy; bao gồm các thẻ tập lệnh được đánh giá khi được chèn vào DOM.

"tập lệnh": Đánh giá phản hồi dưới dạng JavaScript và trả về dưới dạng văn bản thuần túy. Tắt bộ nhớ đệm trừ khi tùy chọn "bộ nhớ cache" được sử dụng. Lưu ý: Thao tác này sẽ chuyển POST thành GET cho các yêu cầu miền từ xa.

"json": Đánh giá phản hồi dưới dạng JSON và trả về đối tượng JavaScript.

"jsonp": Tải trong khối JSON bằng JSONP. Sẽ thêm một "? Callback =?" đến cuối URL của bạn để chỉ định cuộc gọi lại. (Được thêm vào jQuery 1.2)

"văn bản": Một chuỗi văn bản thuần túy.

thấy http://docs.jquery.com/Ajax/jQuery.ajax#options

+0

thấy đầu tiên bình luận khác - phản ứng là trống rỗng -> không có văn bản googleHtml ?! như phản ứng: -/ –

30

Bạn chỉ cần phải viết lại nó như thế:

var response = ''; 
$.ajax({ type: "GET", 
     url: "http://www.google.de", 
     async: false, 
     success : function(text) 
     { 
      response = text; 
     } 
}); 

alert(response); 
+0

mmh tôi đã thử nó trong ie8 và ff3.5.1 - trong ff nó sẽ không hoạt động ?! –

+0

nó trống -> không có phản hồi - nhưng tại sao? –

+3

@all - ajax miền chéo không hoạt động trừ khi miền đã bật jsonp - mà google không – karim79

20

Như Karim đã nói, ajax tên miền chéo không hoạt động trừ khi máy chủ cho phép. Trong trường hợp này Google không, NHƯNG, có một mẹo đơn giản để giải quyết vấn đề này trong nhiều trường hợp. Chỉ cần máy chủ cục bộ của bạn chuyển nội dung được truy xuất thông qua HTTP hoặc HTTPS.

Ví dụ, nếu bạn đang sử dụng PHP, bạn có thể:

Tạo file web_root/ajax_responders/google.php với:

<?php 
    echo file_get_contents('http://www.google.de'); 
?> 

Và sau đó thay đổi mã của bạn để kết nối với rằng thay vì vào miền của Google trực tiếp trong javascript:

var response = $.ajax({ type: "GET", 
         url: "/ajax_responders/google.php", 
         async: false 
         }).responseText; 
alert(response); 
2

Trước tiên, bạn phải tải xuống trình cắm JQuery để cho phép yêu cầu miền chéo. Tải về nó ở đây: https://github.com/padolsey/jQuery-Plugins/downloads

nhập các tập tin gọi là query.xdomainsajax.js vào dự án của bạn và bao gồm nó với mã này:

<script type="text/javascript" src="/path/to/the/file/jquery.xdomainajax.js"></script> 

Để có được html của một trang web bên ngoài trong văn bản hình thức bạn có thể viết thư này:

$.ajax({ 
    url: "http://www.website.com", 
    type: 'GET', 
    success: function(res) { 
     var text = res.responseText; 
     // then you can manipulate your text as you wish 
    } 
}); 
+0

Hoàn toàn không liên quan đến câu hỏi này, nhưng tôi nghĩ bạn có thể tìm thấy [JSFiddle này] (http://jsfiddle.net/dcfWV/1 /) thú vị. Nó liên quan đến câu hỏi bạn đã đăng ngày hôm qua. – IgnisErus

0

Vì yêu cầu jQuery AJAX không thành công nếu chúng là tên miền chéo, bạn có thể sử dụng cURL (bằng PHP) để thiết lập máy chủ proxy.

Giả sử một responder.php file PHP có những nội dung:

$url = "https://www.google.com"; 
$ch  = curl_init($url); 
curl_set_opt($ch, CURLOPT_RETURNTRANSFER, "true") 
$response= curl_exec($ch); 
curl_close($ch); 
return $response; 

yêu cầu AJAX của bạn nên được để tập responder.php này để nó thực hiện các yêu cầu cross-domain.

0

thử này

alert(data['responseText']); 
Các vấn đề liên quan