2010-02-02 29 views
5

Tôi đang xây dựng một tiện ích mở rộng nhỏ của Chrome phải gửi thư thông qua yêu cầu POST http đến máy chủ trong mạng công ty của tôi và tôi đang sử dụng jQuery 1.4. 1 để tăng tốc độ phát triển của phần javascript.jQuery.ajax() gửi yêu cầu POST dưới dạng GET trong phần mở rộng của Chrome

tôi có mã này để gửi yêu cầu:

function send() { 
    $.ajax({ 
     url: "http://mycompany.com/update", 
     method: "POST", 
     data: {status: "sometest", in_reply_to_status_id: "anId"}, 
     success: function(data, textStatus) { 
      console.log("success"); 
      console.log(data); 
      console.log(textStatus); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      console.log("error"); 
      console.log(XMLHttpRequest); 
      console.log(textStatus); 
      console.log(errorThrown); 
     }, 
     complete: function(XMLHttpRequest, textStatus) { 
      console.log("complete");    
     } 
    });  
} 

Yêu cầu thực hiện theo cách này thất bại, trong Chrome log Tôi thấy rằng các máy chủ đáp ứng với một tình trạng http 400 và với dòng chữ "phương pháp này đòi hỏi BÀI ĐĂNG".

Nếu tôi thay đổi để mã trên với điều này:

function send() { 
    $.post("http://sunshine.emerasoft.com/statusnet/api/statuses/update.xml", {status: "sometext", in_reply_to_status_id: "anId"}, function(data) { 
     console.log(data) 
    }); 
} 

tất cả mọi thứ hoạt động tốt, tình trạng http là 200 và phía máy chủ tôi có thể thấy rằng các dữ liệu tôi đã gửi được lưu một cách chính xác.

Tôi cần sử dụng phương thức $ .ajax() đầy đủ vì tôi cần thực hiện một số công việc trong trường hợp thành công hay thất bại và một số khác khi yêu cầu hoàn tất, vì vậy $ .post() là chưa đủ.
Tôi có đang làm điều gì đó sai gọi là $ .ajax() hoặc có vấn đề gì đó, có thể vì tôi đang ở trong phần mở rộng của tiện ích mở rộng của Chrome?

Cảm ơn

Trả lời

13

Tôi tin rằng chức năng $.ajax() có tùy chọn 'loại', không phải tùy chọn 'phương pháp'.

Loại mặc định là GET.

+0

Bạn hoàn toàn đúng :) Tôi đã đi qua tài liệu jQuery một triệu lần và tôi không bao giờ nhận thấy rằng tôi đã sử dụng tùy chọn sai. Cảm ơn bạn đã chỉ cho tôi điều này! –

+0

Đáng ngạc nhiên điều này đã cho tôi một thời gian dài để giải quyết ... Khi làm một POST từ cùng một tên miền nó thực sự sẽ sử dụng POST khi tôi đã 'phương pháp' trong đó. Nhưng ngay sau khi tôi thử POST từ một tên miền khác 'tên miền chéo', nó sẽ kết thúc là GET. Điều này giải quyết nó. Không biết tại sao 'phương thức' hoạt động khi trên cùng một tên miền. – Futile32

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