2009-12-04 29 views
13

Tôi đang sử dụng jQuery ajaxForms plugin để gửi ajax cho ứng dụng CakePHP của mình.Tiêu đề X-Yêu cầu-Với không được đặt trong plugin jquery ajaxForm

RequestHandler của bánh phát hiện yêu cầu ajax bằng cách xem tiêu đề "X-Requested-With", nhưng plugin biểu mẫu dường như không đặt. Hoặc jQuery không đặt nó khi sử dụng plugin.

Tôi đã thử một vài điều,

trong hàm onload chính tôi nói thêm:

$.ajaxSetup({ 
    headers: {"X-Requested-With":"XMLHttpRequest"} 
}); 

Trong mã plugin tôi thêm quyền này trước khi cuộc gọi ajax thực tế:

options.beforeSend = function(xhr) { 
    xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest"); 
}; 

Thực hiện cuộc gọi ajax thông thường, đặt tiêu đề ...

Bất cứ ai có thể nói m e những gì đang xảy ra hoặc quan trọng nhất, làm thế nào tôi có thể sửa lỗi này?

+4

jQuery sẽ thêm tiêu đề X-Requested-With XMLHttpRequest vào các cuộc gọi ajax và plugin ajaxForms sử dụng hàm jquerys ajax để thực hiện các cuộc gọi ajax. Thời gian duy nhất tôi có thể nhìn thấy nó không nhận được gửi là nếu bạn đang làm một tải lên tập tin với ajaxForms plugin – PetersenDidIt

+1

nó là idd một hình thức nhiều ... tại sao nó làm điều này, và điều này có thể được cố định? – NDM

Trả lời

12

@Nicky De Maeyer cho câu hỏi của chính mình

trên thực tế bạn không cần phải làm điều này cho mình (phụ thêm một ẩn trường nhập).

AFAIK bạn chỉ có thể truyền dữ liệu như vậy để ajaxForms cắm trong các tùy chọn đối tượng

$('#myForm1').ajaxForm({data:{"X_REQUESTED_WITH":"XMLHttpRequest"}}); 

nên Automagically (trong file iframe trường hợp upload ẩn) thêm một đầu vào như mẫu của bạn trên trình

<input type="hidden" name="X_REQUESTED_WITH" value="XMLHttpRequest" /> 
+0

Tôi sẽ có một cái ở đó :) – NDM

+6

Cũng giống như một mặt không dành cho những người sử dụng ASP.NET MVC. MVC phân biệt chữ hoa chữ thường và sẽ không nhận ra tham số trừ khi tên là "X-Requested-With". – kim3er

2

Đi từ nhận xét của petersendidit, tôi đã tìm kiếm câu hỏi về ajax/tệp tải lên.

có một câu hỏi thú vị về nó trên SO nói rằng nó là không thể, chỉ thông qua một hack với một iFrame. Vì vậy, không gọi ajax thực tế được làm ...

kể từ khi hình thức của tôi là một nhiều phần dữ liệu với một tập tin tải lên, các plugin sử dụng iFrametechnique thay vì các cuộc gọi ajax thường xuyên ...

Để giải quyết này để biết điều này nên giống một cuộc gọi ajax tôi sẽ thêm một trường nhập ẩn trên hình thức nhiều phần dữ liệu ... câu trả lời

+0

Hoặc chỉ cần thêm 'xhr.setRequestHeader (" X_REQUESTED_WITH "," XMLHttpRequest ");" –

0

Tôi vừa phải giải quyết một vấn đề ngày hôm nay tương tự như vậy và đưa ra một giải pháp khác. Sự cố đã xảy ra với Chrome, Safari và IE nơi tiêu đề (mà tôi đã kiểm tra bằng PHP qua $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') không khớp.

Như được nêu trong câu trả lời trước, khi sử dụng chức năng jQuery ajax, tiêu đề này sẽ được đặt bởi jQuery.

Trong nói các trình duyệt trên, khi sử dụng:

options.beforeSend = function(xhr) { 
    xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest"); 
}; 

Những trình duyệt (không Firefox) sẽ thêm rằng với tiêu đề. Vì vậy, trong thực tế, tiêu đề được đặt là: 'XMLHttpRequest, XMLHttpRequest'

Dòng dưới cùng, không đặt tiêu đề này khi sử dụng các hàm jquery AJAX. Hy vọng rằng giải quyết một số nhức đầu.

3

phát triển mới:

Tính đến nay, jquery.form plugin bây giờ hỗ trợ nhiều phần dữ liệu (bao gồm cả tập tin) cập nhật rất tốt, theo một cách tương thích qua trình duyệt, và đặt X-yêu cầu-Với tiêu đề. Tôi đã gặp vấn đề này với một phiên bản cũ hơn của jquery.form và nâng cấp lên 3.02 đã sửa nó!

0

Tôi thấy vấn đề thiếu hỗ trợ tải lên tệp trong các phiên bản plugin cũ hơn. Khi tôi gỡ bỏ các tập tin đầu vào, vấn đề đã biến mất.

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