2012-07-26 26 views
5

Hôm nay tôi đã gặp lỗi rất lạ khi cố gắng lấy nội dung của tệp PHP trên máy chủ của tôi với $.get.

Nó chỉ xảy ra trong Safari và Chrome trên Mac OS X (Snow Leopard), trên Windows nó hoạt động trong tất cả các trình duyệt đúng cách.

Chức năng giống như:

function _fc() { 
    $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { 

     if (data=='0') { letItGo=true; $('#loginform').submit(); } 
     else ...//Do some other checks 
    }); 
} 
  • Nó không phải là một máy chủ địa phương, đó là một máy chủ web với một miền hiện
  • Tôi không cố gắng để thực hiện bất kỳ ajax cross-domain. Cả hai tệp đều nằm trong cùng một thư mục.

Tôi không thể tìm thấy giải pháp nào cho điều đó.

lỗi chính xác:

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something. 
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin. 
+0

Khi bạn nói nó chỉ xảy ra trên Mac OS X, bạn đang đề cập đến hệ điều hành khách, phải không? Đó là cùng một máy chủ trong các thử nghiệm Mac OS X và các kiểm tra Windows của bạn? –

+0

Tôi biết đây là các trình duyệt khác nhau, nhưng cả hai đều không hoạt động. Máy chủ của tôi dựa trên Unix, tôi chỉ kiểm tra trên Windows và Mac Os X. Lỗi đầy đủ - xem câu hỏi đã chỉnh sửa –

Trả lời

0

Tôi đã làm điều này theo cách này:

$.get("http://<?php echo $_SERVER['HTTP_HOST']; ?>/_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { (...) 

Các bạn là tốt nhất. Cảm ơn bạn.

2

câu trả lời của bạn là trong thông báo lỗi:

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something. 
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin.

http://www.asking1.comhttp://asking1.comkhác nhau nguồn gốc, và vì vậy đây rơi afoul của Chính sách Xuất xứ Same. Xem ví dụ thứ sáu here.

Nếu mã của bạn thực sự là như trích dẫn, với các URL có liên quan, mà không nên xảy ra, bởi vì từ thông báo lỗi tài liệu là trên http://asking1.com, vì vậy đường dẫn tương đối sẽ giải quyết để http://askign1.com/_x_fc.php, đó sẽ là tốt.

Nếu mã của bạn có đường dẫn tuyệt đối trong đó, đó là vấn đề của bạn. Chỉ cần xóa nó để trông giống như mã được trích dẫn của bạn.

Nếu mã của bạn thực sự có đường dẫn tương đối, thì bạn sẽ cần phải đào sâu vào mọi thứ một chút. Một cái gì đó, ở đâu đó, là làm cho trình duyệt nghĩ rằng yêu cầu đối với nội dung www.asking1.com đến từ asking1.com.

+0

Nhưng đó chỉ là vấn đề, nếu OP đã đặt đường dẫn tuyệt đối cho lệnh gọi '$ .get', trong đó vì họ đang thiết lập đường dẫn tương đối, trong trường hợp đó, miền thực tế sẽ không bao giờ khác biệt trừ khi có tệp .htaccess chuyển hướng yêu cầu. – Gavin

+0

@Gavin: Đúng - giả sử rằng mã được trích dẫn là chính xác (đáng buồn thay, tôi thường xuyên thấy mã được chỉnh sửa để làm cho nó ngắn hơn để chỉnh sửa lỗi). Bất kể, thông báo lỗi là rõ ràng rằng đó là một điều SOP. –

2

www về mặt kỹ thuật là miền phụ. Vì vậy, bạn đang vi phạm các same-origin policy. Bạn có thể giải quyết vấn đề này bằng cách đặt

function _fc() { 
    document.domain = "www.asking1.com"; 
    $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { 

     if (data=='0') { letItGo=true; $('#loginform').submit(); } 
     else ...//Do some other checks 
    }); 
} 

hoặc bạn hoàn toàn có thể đủ điều kiện URL mà bạn đang chuyển như một phần của yêu cầu AJAX để đảm bảo rằng nó giống nhau.

+0

Tôi sẽ thử. –

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