2010-06-18 34 views
8

Tôi đã cạn kiệt mọi đại lộ nghiên cứu để giải quyết vấn đề này để hy vọng một người khác sẽ nghĩ về điều gì đó mà tôi không làm.

Thiết lập tương đối thẳng về phía trước, tôi có một trang html với một số javascript tạo yêu cầu ajax cho URL (trong cùng một miền) ứng dụng web java trong nền thực hiện công cụ của nó và trả về một trang html (không có html) , thẻ đầu hoặc thẻ nội dung, chỉ nội dung) sẽ được chèn vào một điểm cụ thể trong trang.

Tất cả âm thanh khá dễ dàng và mã tôi hoạt động trong IE, Firefox và Safari nhưng không hoạt động trong Chrome. Trong Chrome, phần tử đích chỉ kết thúc và nếu tôi nhìn vào yêu cầu tài nguyên trong các công cụ phát triển của Chromes, nội dung phản hồi cũng trống.

Tất cả rất khó hiểu, tôi đã thử vô số thứ để giải quyết nó và tôi chỉ là ngoài ý tưởng. Mọi sự trợ giúp sẽ rất được trân trọng.

var container = $('#container'); 

$.ajax({ 
    type: 'GET', 
    url: '/path/to/local/url', 
    data: data('parameters=value&another=value2'), 
    dataType: 'html', 
    cache: false, 
    beforeSend: requestBefore, 
    complete: requestComplete, 
    success: requestSuccess, 
    error: requestError 
}); 

function data(parameters) { 
    var dictionary = {}; 
    var pairs = parameters.split('&'); 
    for (var i = 0; i < pairs.length; i++) { 
     var keyValuePair = pairs[i].split('='); 
     dictionary[keyValuePair[0]] = keyValuePair[1]; 
    } 
    return dictionary; 
} 

function requestBefore() { 
    container.find('.message.error').hide(); 
    container.prepend('<div class="modal"><div class="indicator">Loading...</div></div>'); 
} 

function requestComplete() { 
    container.find('.modal').remove(); 
} 

function requestSuccess(response) { 
    container.empty(); 
    container.html(response); 
} 

function requestError(response) { 
    if (response.status == 200 && response.responseText == 'OK') { 
     requestSuccess(response); 
    } else { 
     container.find('.message.error').fadeIn('slow'); 
    } 
} 

Tất cả điều này được thực hiện bằng $ (tài liệu) .ready (function() {});

Chúc mừng, Jim

@Oleg - Thông tin thêm yêu cầu, một ví dụ về phản ứng rằng cuộc gọi ajax có thể nhận được.

<p class="message error hidden">An unknown error occured while trying to 
retrieve data, please try again shortly.</p> 
<div class="timeline"> 
    <a class="icon shuttle-previous" 
rel="max_id=16470650733&page=1&q=something">Newer Data</a> 
    <a class="icon shuttle-next" 
rel="max_id=16470650733&page=3&q=something">Older Data</a> 
</div> 
<ol class="social"> 
    <li class="even"> 
     <div class="avatar"> 
      <img src="sphere_normal.gif"/> 
     </div> 
     <p> 
      Some Content<br/> 
      <span class="published">Jun 18, 2010 11:29:05 AM</span> - <a 
target="_blank" href="">Direct Link</a> 
     </p> 
    </li> 
    <li class="odd"> 
     <div class="avatar"> 
      <img src="sphere_normal.gif"/> 
     </div> 
     <p> 
      Some Content<br/> 
      <span class="published">Jun 18, 2010 11:29:05 AM</span> - <a 
target="_blank" href="">Direct Link</a> 
     </p> 
    </li> 
</ol> 
<div class="timeline"> 
    <a class="icon shuttle-previous" 
rel="max_id=16470650733&page=1&q=something">Newer Data</a> 
    <a class="icon shuttle-next" 
rel="max_id=16470650733&page=3&q=something">Older Data</a> 
</div> 
+0

Bạn chạy này tại địa phương? –

+0

Có Nick tất cả điều này đang chạy dưới một ứng dụng web Java và như vậy là trên máy địa phương của tôi tại thời điểm này như http: // localhost: 8090/ – roguepixel

+3

@roguepixel - Để kiểm tra nhanh, hãy thử chạy chrome bằng một '--disable -Web-security' tùy chọn trên dòng lệnh, cùng một kết quả? –

Trả lời

1

Tôi lấy mã nguồn của bạn và thiết lập kịch bản thử nghiệm nhanh nhưng không sao chép được sự cố của bạn. Nó làm việc cho tôi tốt trong cả Firefox (3.6.3) và Chrome (5.0.375.70). Tôi đã thử cả cục bộ lẫn trên máy chủ từ xa.

Vì vậy, mã của bạn có nhiều khả năng không đổ lỗi. Nhưng tôi cũng nghĩ rằng đó không phải là vấn đề liên quan đến Chrome.

Other people dường như đã đi qua điều này mặc dù. Thay đổi kiểu nội dung không có hiệu lực trong kịch bản thử nghiệm của tôi. Nó thậm chí hoạt động khi tôi đặt Content-Type thành image/jpeg.

Trên JQuery forums ai đó đã chỉ ra hành vi khác nhau tùy thuộc vào việc anh ta có chạy ứng dụng của mình cục bộ hoặc trên máy chủ từ xa hay không. Nếu đây là trường hợp của bạn, bạn có thể so sánh yêu cầu HTTP và tiêu đề phản hồi để theo dõi vấn đề.

+0

Cảm ơn những suy nghĩ của bạn, tôi sẽ xem xét thêm một chút về yêu cầu và tiêu đề phản hồi. – roguepixel

2

Tôi vừa giải quyết một vấn đề tương tự và nghĩ rằng tôi sẽ đăng giải pháp của mình trong trường hợp nó được sử dụng cho bất kỳ ai khác.

Chỉ Firefox và Chrome hiển thị phản hồi ajax trống, do đó, nó dường như là một vấn đề về miền chéo, nhưng mọi thứ trên cùng một miền.

Nó bật ra rằng 'www.', Mà tôi đã siêu lỏng và ngu ngốc mã hóa cứng vào url ajax của tôi là để đổ lỗi. Nếu tôi đã sử dụng một con đường tương đối, mọi thứ sẽ ổn thôi.

Tôi đã mở trang thử nghiệm tại thời điểm cụ thể đó là "http://domain.com", không có 'www.', Vì vậy Firefox và Chrome coi trang web đó là một tên miền khác. Điều hướng đến "http://www.domain.com" dẫn đến cuộc gọi ajax hoạt động trong tất cả các trình duyệt.

Vì vậy, cho rằng bạn đã viết:

url: '/ path/to/local/url'

..như là quy ước khi chúng tôi không muốn tiết lộ con đường của chúng tôi, tôi không thể không tự hỏi, nếu thực tế bạn đã viết một con đường tuyệt đối, giống như tôi đã ...?

+0

Bạn đã lưu ngày của tôi! Tôi vừa thử gọi AJAX trong Chrome 8.0.552.237
- với đường dẫn tương đối "bin/test.php" (máy chủ nằm trong mạng cục bộ của tôi) -> đang hoạt động tốt
- với đường dẫn tuyệt đối "http : //192.168.0.101/bin/test.php "(máy chủ nằm trong mạng cục bộ của tôi) -> nó KHÔNG hoạt động !!!

Cảm ơn bạn! – Stan

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