2013-10-16 18 views
11

Tôi nhận được lỗi sau: jquery ajax readystate 0 responsetext status 0 statustext error khi tặng: url(http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm), tuy nhiên nó hoạt động tốt khi tôi cung cấp cho nó url(localhost:""/embparse_page) trên máy chủ cục bộ của mình.jquery ajax readystate 0 trạng thái responsetext 0 lỗi statustext

Tôi đã thử sử dụng tiêu đề mà tôi tìm thấy trên tìm kiếm của Google và tôi cũng đã sử dụng beforeSend:"" nhưng vẫn không hoạt động.

Tôi nghĩ vấn đề chính là: XMLHttpRequest cannot load http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm. Origin "local server" is not allowed by Access-Control-Allow-Origin. nhưng tôi không hiểu.

Bất kỳ ai cũng có thể giải thích vấn đề với tôi, vì tôi khá mới mẻ với vấn đề này.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns:ng="http://angularjs.org"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <meta Access-Control-Allow-Origin="*" /> 
    <title>Page Parsing</title> 
    <script type="text/javascript" src="/js/jquery-1.9.1.min.js"></script> 
    <script> 
    getit=function(){ 
     jQuery.support.cors = true; 
     $.ajax({ 
      type:"GET", 
      url:"http://www.tutorialspoint.com/prototype/prototype_ajax_response.htm", 
      dataType:"html", 
      crossDomain:true, 
      beforeSend: function(xhr) { 
       xhr.overrideMimeType('text/plain;charset=UTF-8'); 
      }, 
      success:function(XMLHttpRequest,jqXHR ,data) { 
       //alert(data.title); 
       var starttitl=data.lastIndexOf('<title>'); 
       var endtitl=data.lastIndexOf('</title>'); 
       var title1=data.substring(starttitl+7,endtitl); 
       alert(title1); 
      }, 
      error:function(errorStatus,xhr) { 
       alert("Error"+JSON.stringify(errorStatus)); 
      } 
     }); 
    } 
    </script> 
</head> 
<body> 
    <div id="siteloader"> 
     <input type="button" onclick="getit()" /> 
    </div> 
</body> 
</html> 
+4

Một mẹo: không sử dụng cảnh báo vì đây là cách gây khó chịu nhất để gỡ lỗi. Hãy thử 'console.log' và nhấn F12 trong Chrome hoặc điều khiển + shift + k trong firefox để mở bảng điều khiển. Bạn có rất nhiều công cụ trong đó mà bạn có thể sử dụng như thiết lập các điểm ngắt và kiểm tra các yêu cầu với yêu cầu và tiêu đề phản hồi của chúng. – HMR

+0

cảm ơn sir vì gợi ý –

+0

Câu trả lời được đánh giá hàng đầu trên bài đăng này là khá sâu: http://stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with-ajax – Adrian

Trả lời

16

Tôi đã gặp phải lỗi này và trong trường hợp của tôi không phải do chính sách gốc. Tôi có một số sự giúp đỡ từ this link

trường hợp của tôi là, tôi đã có một nút liên kết và tôi đã không sử dụng e.PreventDefault()

ASPX

<asp:LinkButton ID="lnkSearch" runat="server" CssClass="DockCmdSearch" CommandName="Search" OnClientClick="return VerifySearch(this, event);" /> 

Javascript

function VerifySearch(sender, e) {   
    e.preventDefault(); 
    $.ajax({ 
       type: 'POST', 
    ............. 
    } 
    return false; 
} 
+0

Câu trả lời được đánh giá hàng đầu trên bài đăng này khá sâu: http: // stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with-ajax – Adrian

0

chính sách gốc tương tự. trình duyệt không cho phép khi bạn đang ở trên

http://site1.com 

để kết nối với:

site2.com 
sub.site1.com 
site1:99.com 
https://site1.com (not sure about this one) 

này là để site1 không thể ăn cắp nội dung từ site2 và giả vờ đó là nội dung của site1. Cách xung quanh đây là JSONP (google maps sử dụng mà tôi nghĩ) và có site2 cung cấp tiêu đề cors nhưng cors không được hỗ trợ trong jQuery 1. * (có thể không phải trong 2. *) vì IE có một số vấn đề khi triển khai nó. Trong cả hai trường hợp, bạn cần site2 để hợp tác với trang web của bạn để trang web của bạn có thể hiển thị nội dung của trang web.

Nếu bạn chỉ sử dụng chính bạn thì bạn có thể sử dụng Firefox và cài đặt plugin forcecors. Để kích hoạt bạn có thể chọn view => toolbars => add on bar và bấm vào chữ "cors" ở phía dưới bên phải của màn hình.

+0

Nhưng chúng ta có thể làm điều này khái niệm (có thể truy cập nội dung của site2 từ site1) trong php bằng cách sử dụng cURL(). Vì vậy, nếu có một cái gì đó như thế trong javascript plz cho tôi biết –

+0

Có, bạn có thể proxy requesrs thông qua máy chủ của bạn nhưng bạn đang vi phạm các tài sản ip của trang web bạn đang nhận được nội dung của bạn từ. Một số trang web siêu thị lớn đã làm điều này và khi các trang web khác phát hiện ra họ đã cung cấp thông tin giả mạo trang web siêu thị với hình ảnh của cắt đầu và thích. Đây là một cách vui tươi và hiệu quả, nó cũng có thể là một luật sư gõ cửa của bạn – HMR

+0

@DhirenderTyagi Việc ủy ​​quyền thông qua php là một tùy chọn nếu site2 không muốn trang web của bạn hiển thị nội dung hoặc muốn nhưng không quan tâm đến tạo một API JSON. Điều này không thể được thực hiện bằng JavaScript vì JavaScript chạy trong trình duyệt và đó là trình duyệt thực thi cùng chính sách gốc để bảo vệ các trang web không bị lấy nội dung và trình bày trên các trang web khác. Ít nhất với phương pháp proxy site2 có thể phát hiện một yêu cầu rất nhiều đến từ cùng một IP. – HMR

-3

Tôi đã thử nghiệm đọc tệp txt/XML cho json/xml dữ liệu và gặp lỗi ...các giá trị đọc: Status[0] & readyState[0]StatusText[error]; này đang làm việc thành công trên Internet explorer nhưng không phải trên Chrome vì miền cần thiết để được như vậy

Đây là những gì cố định nó

Đến C: \ WINDOWS \ system32 \ drivers \ etc \ hosts

Đặt một tên chống lại ứng dụng localhost của bạn:

127.0.0.1 SampleSiteName.com 

Bây giờ mở mã trong chrome như http://SampleSiteName.com/YourAjaxFileName.htm (nếu nó mở ra, có nghĩa là bạn đã nhập tên máy chủ chính xác) chuyển đến tệp HTML của bạn và cung cấp địa chỉ tương đối của tệp mà bạn đang cố gắng đọc (nếu FileToBeRead.txt nằm trong cùng thư mục với YourAjaxFileName.htm, sau đó chỉ cần nhập url: " /FileToBeRead.txt ")

Giờ đây, mã của bạn cũng sẽ hoạt động trên Chrome.

+0

Tôi không thấy làm thế nào điều này có thể nhận được nội dung từ một trang web từ xa. Yêu cầu ajax của bạn sẽ chỉ lặp lại vào máy cục bộ của bạn vì nó sẽ giải quyết việc xóa tên miền thành 127.0.0.1. – Adrian

+1

Trên stackoverflow, để tạo một dòng mới trong bài viết của bạn, bạn phải sử dụng '
'hoặc tạo 2 dòng mới. Xem chỉnh sửa của tôi. –

+0

Rất tiếc xin lỗi đã đến muộn với tôi – Adrian

0

Tôi đã nhận được lỗi đó từ cuộc gọi Ajax của tôi, và những gì đã sửa cho tôi chỉ là đặt vào 'return false'.

Các vấn đề liên quan