2011-08-29 23 views
25

Tôi chỉ cố gắng để làm một yêu cầu đơn giản như thế này:Ajax sẽ [đối tượng% 20Object]

$('.asd').change(
     function() { 
      $.ajax({ 
       url: 'http://127.0.0.1/folder/index.php/controller/action/integer', 
       success: function(data){} 
      }); 
     } 
    ); 

Mã này cố gắng đi đến http://127.0.0.1/folder/index.php/controller/[object% 20Object] thay vào đó và nhận được 404. Nó kéo đối tượng từ đâu? Tôi đang sử dụng một chuỗi đơn giản.

+0

whats kiểu nội dung của bạn? dữ liệu của bạn ở đâu. đây có phải là yêu cầu ajax hoàn chỉnh của bạn không? dán mã đầy đủ của '$ .ajax' – naveen

+0

Có thể trùng lặp của [% 5Bobject% 20Object% 5D (404 không tìm thấy) khi cố gắng gửi qua AJAX] (http://stackoverflow.com/questions/10357445/5bobject20object5d-404-not -found-when-attempt-to-submit-via-ajax) –

Trả lời

4

Tôi đã gặp vấn đề tương tự và tìm kiếm câu trả lời. Thật không may, người đóng góp này không bao giờ trở lại với một. Của tôi là một lỗi ngu ngốc. khi trở về từ Ajax, tôi đã sử dụng vô tình đặt tên biến của tôi sau một từ dành riêng. Dưới đây là những gì tôi có:

$.post('/MyApp.php', { param: 'getLocation' }, 
    function(xml) { 
    location=$(xml).find('Location'); 
    } 
}); 

Coded như thế này, khi trở về từ Ajax trang được chuyển đến http: // myurl/[Object% 20object] mà làm cho cảm giác hoàn hảo bây giờ.

Độ phân giải: thay đổi "location = $ ..." thành "clocation = $ ..." Hy vọng câu trả lời này sẽ giúp người khác. Đó là một khó khăn để gỡ lỗi.

+2

Không liên quan ở đây: người dùng đã không xác định bất kỳ biến nào. Hoàn toàn là lỗi của bạn khi sử dụng các biến toàn cầu. – Eric

+2

Một chút khắc nghiệt khi xem xét Dave chỉ đang đặt một cái gì đó ra khỏi đó trên một câu hỏi tương đối cũ. Vấn đề của tôi là xây dựng URL không đúng. Đó cũng là vấn đề của OP, có lẽ thông qua một chuyển hướng hoặc anh ta vô tình để lại một thứ gì đó từ mẫu mã của anh ấy. – Seth

16

Đối với tôi vấn đề là tôi đã sử dụng $.post thay vì $.ajax.

// fails: 
$.post({ 
    url: "/example/" + this.id, 
    // ... 
}); 

// works: 
$.ajax({ 
    url: "/example/" + this.id, 
    // ... 
}); 
+2

Vâng, nhưng nếu bạn không đặt loại thành 'POST' thì đây là http GET –

+4

Tôi vừa gặp sự cố khi sử dụng '$ .ajax ({type: 'POST' ...}})' thực sự đang sử dụng GET - rất lạ. Tôi đã chuyển sang sử dụng '$ .post()' và thực hiện cùng một lỗi cú pháp như bạn đã làm ở trên. Đối với '$.post() ', tham số đầu tiên là chuỗi URL, tiếp theo là một đối tượng - hơi khác với cú pháp cho phiên bản viết tắt' $ .ajax() '. Chúc mừng. – gthmb

5

ajax mong đợi một bản đồ tham số. post hy vọng thông số duy nhất:

// fails: 
$.post({ 
    url: "/example/" + this.id, 
    // ... 
}); 

// works: 
$.post("/example/" + this.id); 
1

Đối với tôi, làm việc trong Play và sử dụng jsRoutes này là rất rất đau đớn để tìm ra.

Dường như Play (JavaScript) sẽ làm một Ajax GET mà không vấn đề bằng cách sử dụng cú pháp sau:

$.ajax(jsRoutes.controllers.MyController.ajax(inurlparam)) 
.done(function(data) { 
    }).fail(function(data) { 
    }) 

Tuy nhiên (và đây là phần khó chịu) ... Nếu bạn muốn làm một POST bạn cần sử dụng phương pháp absolutURL() trên URL trước tiên để nhận ajax (hoặc bài đăng) không bao gồm [object%20Object] vào url tại thời điểm đăng bài. Không có số lượng gỡ lỗi url hoặc các tham số biểu mẫu dường như chỉ ra những gì đang xảy ra cũng như lý do tại sao. Tôi chỉ là "đoán" giải pháp này ra khỏi sự thất vọng tuyệt đối. PS: Lưu ý các dấu ngoặc vào cuối absolutURL() - js mọi người sẽ ngay lập tức nhận được những người có nghĩa là "làm" chức năng không chỉ vượt qua tôi xử lý với nó.

var url = jsRoutes.controllers.MyController.ajaxPost(inurlparam).absoluteURL(); 
    var formData = $('#form').serialize(); 
    $.ajax({ 
    url: url, 
    type: "POST", 
    data: formData 
    }).done(function(data) { 
    }).fail(function(data) { 
    }) 

tôi trả lời ở đây vì đây là nơi mà Google đưa tôi một lần cuối cùng tôi nhận ra nó có thể không được mã hóa của tôi đã gây ra vấn đề :)

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