2013-08-14 47 views
5

Tôi đang xây dựng tiện ích mở rộng trình duyệt Google Chrome sử dụng $.ajax yêu cầu gửi dữ liệu từ trang web đến máy chủ của tôi (hiện được lưu trữ bằng máy chủ cục bộ). Các content_script.js tập tin đó đang được thực hiện trong bối cảnh của các trang web (more on content scripts) mà phần mở rộng có quyền truy cập để chạy mã này:Yêu cầu Ajax thành công nhưng kết quả trống rỗng

//note: encode64String is assigned earlier in the script... 

$.ajax({ 
type: "POST", 
url: "http://localhost:8888/quartzsite/uploadendpoint.php", 
type: "jsonp", 
data: {img: encode64String}, 
contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
success: function(data){ 
    console.log("The ajax request succeeded!"); 
    console.log("The result is: "); 
    console.log(data); 
}, 
error: function(){ 
    console.log("The request failed"); 
} 
}); 

Vấn đề là yêu cầu Ajax đang thành công nhưng lập luận data mà nó trả về là trống ...

Giao diện điều khiển trông như thế này sau khi mã được điều hành: enter image description here

Hiện nay các nội dung của tập tin uploadedendpoint.php là:

0.123.
<?php 
    header("Access-Control-Allow-Origin: *"); 
    echo 'This comes from php file'; die(); 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Title of the document</title> 
</head> 

<body> 
The content of the document...... 
</body> 

</html> 

Điều này có nghĩa là ít nhất phải có thứ gì đó được trả lại trong biến số data.

Tôi đã xác nhận thêm rằng yêu cầu thành công vì khi tôi gửi yêu cầu đến một url bị hỏng (ví dụ: uploaddddddendpoint.php), mã bên trong thông số error của $.ajax được thực hiện.

Tôi đã đọc câu hỏi tương tự như jQuery $.ajax response empty, but only in Chrome nhưng vô ích ...

CẬP NHẬT:

Tôi đã gỡ bỏ tham số thứ hai type: "jsonp" không hợp lệ hoàn toàn và đã thêm dataType: "text/html". Hiện tại, tôi nhận được yêu cầu ajax không thành công mỗi khi mã được chạy.

CẬP NHẬT: Lạ lùng thay đổi dataType : "text/html" để dataType : "html" làm cho ajax yêu cầu để thành công nhưng một lần nữa với một biến trống data. CẬP NHẬT: Khi sử dụng bộ công cụ dev để giám sát Mạng XHR đây là những tin nhắn/câu trả lời gửi:

enter image description here enter image description here

Liên quan đến lá cờ của sự trùng lặp có thể Impossible to cross site ajax api calls in a chrome extension? Tôi đề nghị khác! Tôi đã điều tra câu hỏi đó và vấn đề KHÔNG có vẻ giống nhau.

+0

Hãy thử điều này trên dòng đầu tiên của tệp php: ' '- Kiểm tra xem bạn có nhận được điều này trong bảng điều khiển không. – Sergio

+0

Tab Mạng hiển thị những gì? hãy thử xóa loại 'jsonp'. – akonsu

+0

@Sergio không thay đổi ... – Brannon

Trả lời

2

Tại sao bạn có hai trường type trong yêu cầu AJAX của mình? jsonpPOST.

$.ajax({ 
    type: "POST", // OK 
    url: "http://localhost:8888/quartzsite/uploadendpoint.php", 
    type: "jsonp", // ??? 
    // ... 
}); 

UPDATE:

Tôi nghĩ rằng bạn nên sử dụng đường dẫn tương đối cho URL. Hãy thử thay đổi yêu cầu của bạn thành:

$.ajax({ 
    type: "POST", 
    url: "/quartzsite/uploadendpoint.php", 
    dataType: "text/html", 
    data: {img: encode64String}, 
    success: function(data){ 
     console.log("The ajax request succeeded!"); 
     console.log("The result is: "); 
     console.dir(data); 
    }, 
    error: function(){ 
     console.log("The request failed"); 
    } 
}); 

Bạn có thể xem Tôi đã thay thế URL bằng /quartzsite/uploadendpoint.php. Điều này có thể giải quyết được sự cố ... URL tuyệt đối có thể báo hiệu yêu cầu tên miền chéo không phải là những gì bạn đang theo dõi.

Ngoài ra, như một lưu ý phụ, không cần thiết phải đặt contentType, vì những gì bạn đang đặt nó là giá trị mặc định. Nếu bạn đang gửi JSON hoặc XML, thì bạn muốn đặt contentType.

+0

Rất thú vị! Tôi đã xóa loại "jsonp" và thêm đúng 'dataType'. Yêu cầu hiện không hoàn toàn (có thể thực sự chỉ ra rằng trước đó nó đã cho kết quả dương tính giả). – Brannon

+1

Bạn không nên sử dụng "jsonp" ở bất kỳ đâu trong yêu cầu của mình. Đó là một phương pháp nâng cao cho các yêu cầu miền chéo và tôi nghi ngờ đó là những gì bạn cần. Bạn vẫn còn có điều đó trong đó? – ktm5124

+0

Tôi đã xóa 'jsonp' – Brannon

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