2011-09-29 32 views
5

Tôi đang làm việc với một tập lệnh có vẻ như sử dụng Ext.Ajax.request (với ExtJS 3) để gửi yêu cầu tên miền chéo - một số yêu cầu POST. Xem xét đang được thực hiện để di chuyển ra khỏi ExtJS3 (có lẽ di chuyển ra khỏi ExtJS nói chung) nhưng một nỗ lực nhanh chóng sử dụng XMLHttpRequest không hoạt động; làm cách nào tôi có thể tìm hiểu kỹ thuật nào đang được sử dụng để gửi các yêu cầu miền chéo đó?Đảo ngược các yêu cầu POST tên miền chéo sử dụng Ext.Ajax.request

Trả lời

-2

Bạn có thể cố gắng sử dụng jsonp Jquery dụ:

$.ajax({ 
    url: "test.php", 
    dataType: "jsonp" 
    success: function(data){ 
    console.log(data) 
    } 
}); 

Hoặc nếu bạn có quyền truy cập vào các nội dung yêu cầu, bạn có thể thiết lập các tiêu đề Access-Control-Allow-Origin. PHP dụ:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
0

Các Ext JS 3.4 online documentation sẽ cung cấp cho bạn với các mô hình thừa kế Ext.Ajax lớp mà có thể được sử dụng để theo dõi các mã nguồn tương quan với Ext.Ajax.request phương pháp gọi. Tuy nhiên, thay vì dành nhiều thời gian và tài nguyên để tạo lại bánh xe, tôi khuyên bạn nên triển khai lớp JS JS Ext.data.ScriptTagProxy gốc vào các cửa hàng đã tồn tại của bạn qua tùy chọn cấu hình proxy để tạo điều kiện cho các yêu cầu miền chéo của bạn cho các cửa hàng từ xa. Dưới đây là một ví dụ viết tắt của những gì tôi đang đề cập đến.

Ví dụ

var myJsonStore = new Ext.data.JsonStore 
({ 
    autoLoad : true, 
    proxy : new Ext.data.ScriptTagProxy 
    ({ 
     url : 'http://www.cross-domain.com/file.php' 
    }), 
    fields : ['myIdColumn','myCharColumn','myDateColumn'] 
}); 

BỔ SUNG

Bởi vì bạn có ý định về di chuyển ra từ việc sử dụng Ext JS xin vui lòng kiểm tra các thư viện ACD (AJAX Cross Domain).

+0

Nhưng tôi có ý định di chuyển ra khỏi việc sử dụng ExtJS ... điều này có khiến bạn tiếp tục sử dụng ExtJS không? –

+0

Không nhất thiết. Tôi đã cố gắng gợi ý rằng bạn bắt đầu bằng cách xem xét mô hình thừa kế lớp 'Ext.Ajax' và logic phương thức' request' cơ bản của nó bằng cách sử dụng tài liệu trực tuyến Ext JS 3.4. Bằng cách bắt đầu ở đó và hiểu được hệ thống phân cấp thừa kế, bạn có thể dễ dàng duyệt qua cây, xác định và xem lại (các) phương thức siêu lớp và logic chịu trách nhiệm tạo điều kiện cho các yêu cầu miền chéo. Ví dụ của tôi có thể đã được truyền thông sai, nhưng được dự định để gợi ý cho lớp 'Ext.data.ScriptTagProxy' cụ thể, nơi bạn có thể sẽ tìm thấy những gì bạn đang tìm kiếm. –

+0

Vui lòng kiểm tra việc bổ sung thư viện JavaScript AJAX rất đơn giản và nhẹ của tôi cung cấp hỗ trợ tên miền chéo. Bạn có thể sử dụng chính thư viện hoặc mã nguồn làm tài liệu tham khảo nếu bạn được thiết lập để viết một giải pháp homegrown. –

3

Tôi hiện đang sử dụng ExtJS 3.3.1, tôi chưa chuyển sang 4 nhưng sẽ rất có thể khi dự án mới xuất hiện. Nếu không nhìn vào nguồn Ext tôi có thể nói với bạn rằng họ đang sử dụng JSONP để thực hiện nhiệm vụ này, đó là cách duy nhất để thực hiện cuộc gọi AJAX tên miền chéo vì JavaScript phải tuân theo same-origin policy.

Bạn đang cố gắng thực hiện JS JS thuần túy không? Hay bạn đang sử dụng thư viện JS?

Sửa

mỗi ý kiến ​​của chúng tôi ... họ đang làm cho các yêu cầu POST. Điều đó là không thể với JSONP. Vì vậy, theo như tôi có thể nói, họ đang sử dụng iframe thủ thuật tương tự. Đó là mẹo tương tự được sử dụng để tải lên tệp "AJAX" trên các trình duyệt cũ hơn.

This liên kết giải thích chi tiết hơn.

Ngoài ra, cùng một phương pháp (iframe tới, POST, tải lên tệp) được sử dụng trong Valum's file uploader. Nó dễ dàng hơn để làm theo sau đó nguồn ExtJS.

+0

Nhưng bạn có thể sử dụng JSONP để gửi yêu cầu POST không? Tôi đang xem hoạt động mạng trong Firebug và trang đang gửi yêu cầu POST tên miền chéo –

+0

Bây giờ bạn có tôi tò mò ... Tôi cho rằng JSONP chỉ có thể gửi yêu cầu GET. Tôi sẽ đi đào. –

+0

Bạn và tôi cả hai người đàn ông! –

0

JSONP hơi bị hack nhưng có thể sử dụng được.

Tuy nhiên, hãy cân nhắc sử dụng CORS nếu bạn kiểm soát các miền bị gạch chéo. CORS liên quan đến việc đặt tiêu đề (Access-Control-Allow-Origin) trong phản hồi từ trang web: http://enable-cors.org/

Được hỗ trợ bởi trình duyệt IE 8+ (có báo trước, natch), Firefox và WebKit.IE caveat là: IE sử dụng một đối tượng yêu cầu khác (XDomainRequest) cho các yêu cầu CORS. Nếu bạn phải hỗ trợ Opera, bạn sẽ cần phải sử dụng JSONP hoặc một polyfill (giống như https://github.com/gimite/web-socket-js/, yêu cầu Flash).

Nếu bạn không kiểm soát các miền được đề cập, bạn có thể thử yêu cầu họ hỗ trợ CORS.

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