【问题标题】:Unable to call route through javascript function无法通过javascript函数调用路由
【发布时间】:2019-10-18 06:19:01
【问题描述】:

我正在尝试通过 javascript 函数调用 laravel 路由。我已经在互联网上和这里一路探索,但我没有找到我的解决方案。我提到了一个关于如何在 javascript 函数中调用路由的堆栈溢出答案,但它对我不起作用。我的路线:

Route::get("edit_contact/{id}",'ContactController@edit');

Javascript 函数:

    {
         var url = '{{ route("edit_contact",":id") }}';
         url = url.replace(':id', count);
         document.location.href = url;          
    }

count 是在 javascript 中定义的,我需要在路由中传递。 问题是它不断给出错误.. Route [edit_contact] not defined.

通过 html 访问时,所有这些路由都可以正常工作。我也尝试通过此方法调用其他路线,但没有一条有效。

【问题讨论】:

    标签: javascript laravel routes


    【解决方案1】:

    在路由文件中:(web.php)

    Route::get("edit_contact/{id}",'ContactController@edit');
    

    在js代码中:

    这里我使用计数值 3 仅作为示例。您可以使用您的实际计数值。

    <script>
       var count = 3;
    
       var baseurl = window.location.protocol + "//" + window.location.host;
    
       var url = baseurl + '/edit_contact/' + count;            
    
       document.location.href = url; 
    
    </script>
    

    【讨论】:

      【解决方案2】:

      试试这件作品。它应该工作:

      Route::get("edit_contact/{id}",'ContactController@edit');
      
      javascript code
      
      <script type="text/javascript">
      
      $("#valueid").change(function(e){
      
             var id= e.target.value; // the id to be pass
              //alert(id);
              //checking the state of the domain if secured or not
                 if ("https:" == document.location.protocol) {
                  //alert('secured');
                  location.href="https://www.example.com/edit_contact/"+id;
              } else {
                  //alert('not secured');
                   location.href="http://www.example.com/edit_contact/"+id;
              }
      
          });
      
      </script>
      

      【讨论】:

        【解决方案3】:

        试试

        let count=3
        document.location.href = `edit_contact/${count}`;

        【讨论】:

          【解决方案4】:
          var routeUrl = route('posts.index');
          var routeUrl = route('posts.show', {post: 1337});
          
          // Returns results from /posts
          return axios.get(route('posts.index'))
            .then((response) => {
                return response.data;
             });
          

          【讨论】:

          • 虽然此代码可能会解决问题,但 including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释,并说明适用的限制和假设。
          【解决方案5】:

          这样命名您的路线:

          Route::get("edit_contact/{id}",'ContactController@edit')->name('edit_contact');
          

          【讨论】:

          • 哦,谢谢..我从没想过这个问题可以如此微不足道
          • 如果我的回答有帮助,请将其标记为正确答案。
          • 如果我们必须通过javascript在路由中传递一个两个变量,那会怎样?我试图通过 ':b_id' 添加它,但它没有工作