【问题标题】:Post data using XMLHttpRequest to laravel 5.2 controller as request使用 XMLHttpRequest 将数据作为请求发布到 laravel 5.2 控制器
【发布时间】:2016-09-22 09:47:26
【问题描述】:

我已经使用 javascript XMLHttpRequest() 成功发布/更新到 php $_REQUEST,例如:

 function ajax_edit(e_id){

          var edit_form = document.getElementById('edit_form'+e_id);

            var e_name = document.getElementById('name'+e_id).value,
                        e_email = document.getElementById('email'+e_id).value,
                        e_contact = document.getElementById('contact'+e_id).value,
                        e_status = document.getElementById('status'+e_id).value;
                    xmlhttp.open('GET', 'hello-world.php?edit=yes&id='+e_id+'&name='+e_name+'&email='+e_email+'&contact='+e_contact+'&status='+e_status, true);
                    xmlhttp.send();


            $('#edit'+e_id).modal('hide');
                return false;   
                edit_form.reset();
        }

我的 php 工作是这样的:

if(isset($_REQUEST['edit'])){
    $name = mysqli_real_escape_string($conn, strip_tags($_REQUEST['name']));
    $email = mysqli_real_escape_string($conn, strip_tags($_REQUEST['email']));
    $contact = mysqli_real_escape_string($conn, strip_tags($_REQUEST['contact']));
    $status = mysqli_real_escape_string($conn, strip_tags($_REQUEST['status']));
    $edit_sql = "UPDATE users SET name = '$name', email = '$email', contact = '$contact', status = '$status' WHERE id = '$_REQUEST[id]'";
    $run_edit = mysqli_query($conn, $edit_sql);
}

现在我正在尝试将相同的过程应用于另一个 Laravel 5.2 项目,但不知道该怎么做,特别是 url (hello-world.php?edit=yes) 部分来自哪里我将根据请求向我的控制器发送数据。

到目前为止,我已经完成了这个:

            function submit_form(edit_id){

            xmlhttp = new XMLHttpRequest();

            var edit_form = document.getElementById('edit_form'+edit_id);
            var url = "{{ URL::to('updatelabdetails'); }}";

            var edit_labname = document.getElementById('labname'+edit_id).value,
                edit_pcname = document.getElementById('pcname'+edit_id).value;

                alert(edit_pcname);

            var params = "labname='+edit_labname+'&pcname='+edit_pcname";


                alert(params);

                xmlhttp.open('GET', url+"?"+params, true);
                xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

                xmlhttp.onreadystatechange = function() {

                if(xmlhttp.readyState == 4 && http.status == 200) {
                            alert(xmlhttp.responseText);

                        }
                    }
                xmlhttp.send();


                return false;

        }

但只能输出到 alert(edit_pcname); 部分。

我的路线:

   Route::post('updatelabdetails', 'LoginController@updateLabDetails');

我的控制器:

    public function updateLabDetails(Request $request){
        $post = $request->all();
        var_dump($post);
        die();
        }

在提交到诸如 /showlabdetails? 之类的 URL 后,出现 MethodNotAllowedHttpException 错误。

提前致谢。

【问题讨论】:

  • 您正在发送一个 GET 请求 xmlhttp.open('GET', url+"?"+params, true);,而路由被定义为 POST Route::post('updatelab...,这就是您收到 MethodNotAllowedHttpException 的原因。
  • 我通过更改但同样的问题检查了它们('GET,'POST')。请用“?”向我推荐 url 部分因为我没有得到警报(参数)中的实际值;因为“var params”没有得到正确的值。

标签: javascript php ajax laravel-5.2


【解决方案1】:

请像这样更新您的 submit_form 函数

function submit_form(edit_id){
    var edit_labname = document.getElementById('labname'+edit_id).value,
            edit_pcname = document.getElementById('pcname'+edit_id).value;

    var http = new XMLHttpRequest();
    var url = "updatelabdetails";
    var params = "labname='+edit_labname+'&pcname='+edit_pcname";
    http.open("POST", url, true);

    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    http.onreadystatechange = function() {
    if(http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
    }
   }
   http.send(params);
}

【讨论】:

  • 它也没有发生 :( 请让我知道这是怎么回事 [xmlhttp.open('GET', 'hello-world.php?edit=yes&id='+e_id+'&name='+e_name+' &email='+e_email+'&contact='+e_contact+'&status='+e_status, true);] 类型的代码必须根据要求写入 laravel 5.2 控制器的刀片模板中。
  • xmlhttp.open('GET', 'hello-world.php?edit=yes&id='+e_id+'&name='+e_name+'&email=‌​'+e_email+'&contact=‌​'+e_contact+'&status‌​='+e_status, true); 这是一个 GET 请求,这就是为什么我们可以发送带有键值对的 Query String
  • 好的,我为 js 和路由设置了相同的 get/post,现在请告诉我如何将这个 xmlhttp.open() 代码转换为 laravel 控制器。 [hello-world.php?edit=yes] 的替代品是什么
【解决方案2】:

您的 laravel 路由不正确,您已注册 POST 路由并访问了 GET 路由。

Route::post('updatelabdetails', 'LoginController@updateLabDetails'); 更改为Route::get('updatelabdetails', 'LoginController@updateLabDetails');

【讨论】:

  • laravel 5.2 控制器的 [hello-world.php?edit=yes] 的替代品是什么???
  • 在 JavaScript 中 js xmlhttp.open('GET', 'hello-world?edit=yes&id='+e_id+'&name='+e_name+'&email='+e_email+'&contact='+e_contact+'&status='+e_status, true); 在路由中 php Route::get('hello-world', 'YourController@methodName');
【解决方案3】:

您需要按照 laravel 文档中的说明在您的请求中添加令牌。看这个链接https://laravel.com/docs/5.4/csrf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 2015-03-30
    • 2020-02-01
    • 2019-02-08
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多