2016-10-26 88 views
0

我有以下:LINK_TO和AJAX請求4

<%= link_to "Some_link", some_path, class: "btn btn-success btn-xs", id: "contact", "data-sid" => item.id %> 

以我的application.js我有:

$('#contact').click(function (e) { 
    e.preventDefault(); 

    var item_id = $(this).data('sid'); 

    $.ajax({ 
     type: 'GET', 
     url: '/somepath'+ item_id, 
     success: function(data) { 
     $("#edit-project-modal").find("input[name='id']").val(data.id); 
     $("#edit-project-modal").find("input[name='name']").val(data.name); 

    }, 

     error: function() { 
     window.alert('Error Loading Item!!'); 
     } 
    }); 
}); 

路徑 「SOME_PATH」 將具有用於用戶在表格完成。說,我真正想要實現的是,當用戶點擊鏈接「Some_link」時,鏈接可以將用戶重定向到「some_path」,但在此之前,我想執行ajax請求來將數據加載到表單中。我不知道在這種情況下是否可以使用:remote =>「true」。現在發生的事情是,當我點擊鏈接ajax的作品,但它不會送我到頁面。

我在做什麼錯?有什麼建議麼。 預先感謝您。

+0

我可以問一下,想填充表單並重定向的動力是什麼?我一直在努力理解對AJAX的需求。 – David

+0

@ henners66我使用ajax來請求API數據。我將使用這些數據填寫表格的一部分。當我點擊鏈接時,我發現ajax請求可以工作,但並沒有帶我到任何地方。 – aminhs

+0

@ henners66鏈接上的路徑與調用API數據的路徑不同。 – aminhs

回答

0

好了現在我明白你的要求好多了,我覺得我更能夠幫助你。你有非常複雜的事情,你試圖解決這個問題的方式是行不通的。

它現在的方式$('#contact').click(function (e)捕獲點擊事件,然後嘗試執行AJAX查詢 - 我假設你正在從你的控制器發回數據,而不是從那裏做任何渲染。你會收到數據然後嘗試填充表單字段,但是當然這些表單字段不存在......你還沒有導航到那個頁面 - 很可能你的jQuery在這個時候失敗了。

現在,因爲您吞噬了事件並阻止了默認行爲,所以您的鏈接的原始路徑未被遵循。即使您允許事件傳播,它也不會像上一段中突出顯示的那樣工作。

好了,不知道您的進一步需求是什麼,對我來說,似乎所有你需要做的是

  1. 刪除所有的jQuery。
  2. 允許link_to按正常HTTP GET命中您的操作。

    <%= link_to edit_item_path(item), class: "btn btn-success btn-xs", id: "contact" %>

    **假設你有一個ItemController與編輯操作,並且路由是設置爲

    edit_item GET /items/:id/edit(.:format) items#edit

  3. 設置你的數據作爲一個實例變量在控制器

    @item = Item.find(params[:id])

  4. 將表單呈現爲html。ERB使用實例變量 -

例如,

<%= form_for @item, url: item_path do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    <input type='submit'/> 
<% end %> 

只是一個簡單的導航到的形式。

+0

我可以做到這一點,但我現在的問題是我怎麼能有這個特定項目的鏈接鏈接到它的id。我有一個項目列表,他們都單獨有這個鏈接附加。如果您在我的link_to上注意到我正在記錄項目ID。謝謝你的幫助。 – aminhs

+0

只是簡單的''%= link_to「Some_link」,some_path(item),class:「btn btn-success btn-xs」,id:「contact」%>'假設你在路由中有類似的東西 - 通常你會在你的控制器中有一個編輯動作,路由將如下所示:'edit_user GET /users/:id/edit(.:format)users#edit'將被調用爲'<%= link_to edit_user_path(user)%>這會觸及'UserController'上的'edit'動作 - 我假設這是你正在做的事......編輯一個現有的模型實體。 – David

+0

更新瞭解決方案,使其更清晰,我希望 – David

0

假設你想:

  1. 點擊 「某種聯繫」(通過AJAX)
  2. 然後,聯繫表格下面會顯示 「某種聯繫」

您可以使用以下:

<%= link_to "Some_link", some_path, class: "btn btn-success btn-xs", id: "contact", "data-sid" => item.id %> 
<section id='contact-form'></section> 

$('#contact').click(function (e) { 
    e.preventDefault(); 

    var item_id = $(this).data('sid'); 

    $('#contact-form').load('/somepath'+ item_id, function(response, status, xhr){ 
    if (status === "error") { 
     window.alert('Error Loading Form!!'); 
    } 
    else { 
     window.alert('Success Loading Form!!'); 
    } 
    }) 
); 
+0

some_path將帶我到表單,並且ajax URL路徑是請求json數據的API路徑。他們是不同的。抱歉。 – aminhs