2012-05-02 27 views
7

Tôi đang làm việc trên chức năng đánh dấu trang nơi người dùng nhấp vào nút jQueryui và một số thông tin nhất định được gửi đến cơ sở dữ liệu. Nhưng tôi không sử dụng biểu mẫu vì không có thông tin nào để người dùng nhập.nhấp vào nút jquery + gửi dữ liệu không có biểu mẫu - đánh dấu

Tôi kéo ID của người dùng từ các dữ liệu session, và tôi gửi một đoạn URI (phần của URL)

Sử dụng CodeIgniter/php.

Tôi đang cố gắng tìm ra những gì cần đưa vào phần dữ liệu của hàm ajax/post, vì không có biểu mẫu/dữ liệu nào được nhập và phải làm gì với phần "gửi" của bộ điều khiển.

khiển

function addBookmark(){ 

     if ($this->input->post('submit')) { 

      $id = $this->session->userdata('id');    
      $bookmark = $this->uri->segment(3, 0); 

      $this->bookmarks_model->postBookmark($id, $bookmark); 
     } 

    } 

Mẫu

function postBookmark() { 

    $data = array(
      'user_id' => $user_id, 
      'bookmark_id' => $bookmark, 
    ); 

    $this->db->insert('bookmarks', $data); 

    } 

HTML

<button class="somebutton">Add bookmark</button> 

jQuery

$('.somebutton').click(function() { 

      $.ajax({ 
       url: 'controller/addBookmark', 
       type: 'POST', 
       data: ???, 
       success: function (result) { 
        alert("Your bookmark has been saved"); 
       } 
      }); 

    }); 
+0

Mô hình được kết nối như thế nào? – wallyk

+0

@wallyk Mô hình (bookmarks_model) được kết nối với bộ điều khiển bằng dòng cuối cùng của chức năng điều khiển. – chowwy

Trả lời

8

Vấn đề của bạn là bạn kiểm tra một khóa submit trong số POST args. Bạn có thể giả mạo nó bằng cách gửi data: {submit:true} hoặc bởi bằng cách loại bỏ của bạn câu lệnh if và chỉ xử lý một yêu cầu POST

$('.somebutton').click(function() { 

     $.ajax({ 
      url: 'controller/addBookmark', 
      type: 'POST', 
      data: {'submit':true}, // An object with the key 'submit' and value 'true; 
      success: function (result) { 
       alert("Your bookmark has been saved"); 
      } 
     }); 

}); 
+0

Tôi đã thử điều này với dữ liệu: {submit: true} và không có dữ liệu. Tôi cũng đã thử nó mà không có chức năng nếu. Tôi nhận được cảnh báo, nhưng không có gì đang được thêm vào cơ sở dữ liệu. – chowwy

+0

Được rồi, tôi đã thực hiện một số thao tác với các nút của tôi và nó hiện đang hoạt động - không có gì trong trường dữ liệu như bạn đề xuất. Thay vào đó, tôi đã thêm một trường ẩn để lấy dữ liệu. Tôi đã chấp nhận và upvoted câu trả lời của bạn, vì nó là gần nhất. (Bây giờ nếu tôi chỉ có thể nhận được cảnh báo để làm việc!) :) – chowwy

0

Thay vì sử dụng .ajax() sử dụng một trong hai .get() hoặc .post()

Sử dụng .get()

$.get('controller/addBookmark',function(data){ 
    alert('Your bookmark has been saved'); 
}); 

Sử dụng .post()

$.post('controller/addBookmark', function(data) { 
    alert('Your bookmark has been saved, The contents of the page were:' + data); 
}); 
+0

Cảm ơn, tôi sẽ thử ngay bây giờ. Những gì nên ở trong "dữ liệu" nơi? Chỉ là dữ liệu từ? – chowwy

+0

'dữ liệu' là kết quả của trang trên gọi lại. –

+0

Được rồi; làm cách nào để chỉ ra dữ liệu trong hàm? Tôi không có bất kỳ đầu vào nào – chowwy

0

từ tài liệu của jQuery.ajax()

dữ liệu được gửi đến máy chủ. Nó được chuyển thành chuỗi truy vấn, nếu chưa phải là một chuỗi. Nó được nối vào url cho các yêu cầu GET.

Nếu bạn không biết phải đặt gì cho dữ liệu, có lẽ bạn nên xóa tùy chọn đó? Trong hàm điều khiển của bạn addBookmark(), bạn có thể giảm mã bằng cách loại bỏ nếu kiểm tra. Hãy thử điều này và xem nó có hiệu quả với bạn hay không.

+0

Cảm ơn; Tôi đã thử điều này, nhưng không có dữ liệu nào được gửi đến cơ sở dữ liệu – chowwy

+0

@chowwy kiểm tra mã của bạn '$ this-> bookmarks_model-> postBookmark ($ id, $ bookmark);' trong bộ điều khiển và 'chức năng postBookmark() {' trong mô hình của bạn , cuộc gọi có được thực hiện chính xác không? – Jasonw

+0

Vâng, chúng đúng. – chowwy

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