2015-02-12 86 views
0

这里是我们的赖斯3.2应用程序的js代码响应更改其IDS开始 'order_order_items_attributes' 字段:

$(function(){ 
    $(document).on('change', "[id^='order_order_items_attributes'][id$='_name']", function(){ 
    $.post(window.location, $('form').serialize(), null, "script"); 
    return false; 
    }); 
}); 

的$。后()导致错误:

"NetworkError: 404 Not Found - http://localhost:3000/po/orders/new?parent_record_id=4&parent_resource=ext_construction_projectx%2Fprojects&project_id=4%22" 

这里是window.locationenter image description here

如果我们更换$。员额()与$获得(),那么鳕鱼Ë正常工作,并触发了服务器上的Ajax响应:

$.get(window.location, $('form').serialize(), null, "script"); #works! 

但是,我们必须使用$。员额(),因为大量的数据被发送到服务器。 jquery文档显示$ .get()和$ .post()具有完全相同的格式。我们在$ .post()中错过了什么?谢谢。

UPDATE:耙路输出:

Routes for PurchaseOrderx::Engine: 
     search_order_items GET /order_items/search(.:format)   purchase_orderx/order_items#search 
search_results_order_items GET /order_items/search_results(.:format) purchase_orderx/order_items#search_results 
     stats_order_items GET /order_items/stats(.:format)   purchase_orderx/order_items#stats 
stats_results_order_items GET /order_items/stats_results(.:format) purchase_orderx/order_items#stats_results 
       order_items GET /order_items(.:format)    purchase_orderx/order_items#index 
          POST /order_items(.:format)    purchase_orderx/order_items#create 
      new_order_item GET /order_items/new(.:format)   purchase_orderx/order_items#new 
      edit_order_item GET /order_items/:id/edit(.:format)  purchase_orderx/order_items#edit 
       order_item GET /order_items/:id(.:format)   purchase_orderx/order_items#show 
          PUT /order_items/:id(.:format)   purchase_orderx/order_items#update 
          DELETE /order_items/:id(.:format)   purchase_orderx/order_items#destroy 
      search_orders GET /orders/search(.:format)    purchase_orderx/orders#search 
    search_results_orders GET /orders/search_results(.:format)  purchase_orderx/orders#search_results 
       stats_orders GET /orders/stats(.:format)    purchase_orderx/orders#stats 
     stats_results_orders GET /orders/stats_results(.:format)  purchase_orderx/orders#stats_results 
     event_action_order GET /orders/:id/event_action(.:format) purchase_orderx/orders#event_action 
     acct_approve_order PUT /orders/:id/acct_approve(.:format) purchase_orderx/orders#acct_approve 
     acct_reject_order PUT /orders/:id/acct_reject(.:format)  purchase_orderx/orders#acct_reject 
      gm_approve_order PUT /orders/:id/gm_approve(.:format)  purchase_orderx/orders#gm_approve 
      gm_reject_order PUT /orders/:id/gm_reject(.:format)  purchase_orderx/orders#gm_reject 
      gm_rewind_order PUT /orders/:id/gm_rewind(.:format)  purchase_orderx/orders#gm_rewind 
       submit_order PUT /orders/:id/submit(.:format)   purchase_orderx/orders#submit 
    list_open_process_orders GET /orders/list_open_process(.:format) purchase_orderx/orders#list_open_process 
        orders GET /orders(.:format)      purchase_orderx/orders#index 
          POST /orders(.:format)      purchase_orderx/orders#create 
       new_order GET /orders/new(.:format)     purchase_orderx/orders#new 
       edit_order GET /orders/:id/edit(.:format)   purchase_orderx/orders#edit 
        order GET /orders/:id(.:format)     purchase_orderx/orders#show 
          PUT /orders/:id(.:format)     purchase_orderx/orders#update 
          DELETE /orders/:id(.:format)     purchase_orderx/orders#destroy 
         root  /         purchase_orderx/orders#index 

这里是输出耙路线采购订单引擎。大多数路线与问题无关,仍按原样列出。

这里的routes.rb:

resources :order_items do 
    collection do 
     get :search 
     get :search_results 
     get :stats 
     get :stats_results 
    end 
    end 

    resources :orders do 
    collection do 
     get :search 
     get :search_results 
     get :stats 
     get :stats_results 
    end 

    end 

工作流相关行动在routes.rb中,便于读取被拆除。

+0

你尝试发布来创建吗?像 - http:// localhost:3000/po/orders /创建?parent_record_id = 4&parent_resource = ext_construction_projectx%2Fprojects&project_id = 4%22“ – 2015-02-12 20:53:04

+0

您可能没有在routes.rb中指定路径为POST。我们的routes.rb看起来像? – 2015-02-12 20:54:43

+0

这篇文章将发送表单上的用户输入到服务器ajax。服务器接受用户输入并从数据库中检索并在某些字段中插入表单。由于用户可以动态地向表单添加更多字段,因此回发到服务器的数据可能非常大。这就是为什么我们要使用$ .post而不是$ .get。 – user938363 2015-02-13 03:34:27

回答

2

使用POST HTTP动词时,后端路由无法将该URL正确路由到有效的控制器。在终端的Rails项目的根目录中,运行rake routes以查看所有可用路由以及它们在哪里结束。没有看到你的routes.rb我不能解释到底什么是错的,但它肯定是一个后端路由问题。

我不会推荐一些评论意见,只是“坚持这个在routes.rb,它会工作”。你的路线应该很好地维护,并且使用正确的路线助手来完成这项工作。如果你抛出混乱。路线在那里解决问题,最终你会得到一堆用于路由的意大利面,随着时间的推移,你的应用程序的维护将变得更加困难。

编辑:更新时要引用来自问题的更新 当前页面的URL是/po/orders/new。看着你rake routes输出,这映射到new_order_path,通过此行证明:

new_order GET /orders/new(.:format)     purchase_orderx/orders#new 

如果你直视它上面,你会看到的create行动真正路线:

POST /orders(.:format)      purchase_orderx/orders#create 

这个create行动是POSTorders_path,它解析为/po/orders/。如果你发布到这个URL,一切都应该工作。如果你希望能够张贴您目前正在使用中的URL和它的工作,只是修改routes.rb符合此:

resources :order_items do 
    collection do 
    get :search 
    get :search_results 
    get :stats 
    get :stats_results 
    end 
end 

resources :orders do 
    # Manually route POSTs to /new to the create action 
    post "/new", :controller => :orders, :action => :create 

    collection do 
    get :search 
    get :search_results 
    get :stats 
    get :stats_results 
    end 
end 

现在,当你做一个POST到这个网址(/po/orders/new,它会点击OrdersControllercreate的方法,你仍然可以通过POSTing到/po/orders(正如我上面推荐的)来打这个方法

+0

Mike Trpcic,请通过routes.rb和rake路线查看更新后的帖子。另外请注意,po的功能由轨道引擎提供。 – user938363 2015-02-17 03:25:37

+0

它是有道理的!除了创建新订单的情况外,编辑订单也需要一个帖子。编辑时,发布的正确网址是什么?我们用/ po/order/id去吗? – user938363 2015-02-17 20:13:58

+0

在Rails中,使用“PUT”请求进行编辑。您将对/ po/order /:id发出PUT请求。 – 2015-02-17 22:35:12