Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的路线返回404错误Laravel?_Javascript_Php_Ajax_Laravel_Request - Fatal编程技术网

Javascript 为什么我的路线返回404错误Laravel?

Javascript 为什么我的路线返回404错误Laravel?,javascript,php,ajax,laravel,request,Javascript,Php,Ajax,Laravel,Request,我目前正在尝试对一种表单post发出AJAX请求,但是我试图将数据发送到的PHP解析脚本返回了一个404错误,我可以通过Chrome开发者工具看到这个错误。这是我的密码: <script type="text/javascript"> function ajax_post(){ var hr = new XMLHttpRequest(); var url = "/products/parse.blade.php"; var productName = doc

我目前正在尝试对一种表单post发出AJAX请求,但是我试图将数据发送到的PHP解析脚本返回了一个404错误,我可以通过Chrome开发者工具看到这个错误。这是我的密码:

<script type="text/javascript">

function ajax_post(){
    var hr = new XMLHttpRequest();
    var url = "/products/parse.blade.php";
    var productName = document.getElementById("productName").value;
    var quantityInStock = document.getElementById("quantityInStock").value;
    var pricePerItem = document.getElementById("pricePerItem").value;
    var totalValueNumber = quantityInStock * pricePerItem;
    var route = "productName="+productName;
    hr.open("POST", url, true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            var return_data = hr.responseText;
            document.getElementById("status").innerHTML = return_data;
        }
    }
    hr.send(route);
    document.getElementById("status").innerHTML = "processing...";
}

</script>

<div class="container-fluid form-container">
  <div class="row">
    <div class="col-lg-3 col-md-12">

            <div class="form-group">
                <input type="text" name="productName" id="productName" placeholder="Product Name" class="form-control" required>    
            </div>

            <div class="form-group">
                <input type="number" name="quantityInStock" id="quantityInStock" placeholder="Quantity in Stock" class="form-control" required> 
            </div>

            <div class="form-group">
                <input type="number" step="0.01" name="pricePerItem" id="pricePerItem" placeholder="Price per Item" class="form-control" required>  
            </div>

            <input type="submit" value="Create Product Listing" class="btn btn-primary" onclick="ajax_post();">

            <hr>
            <div id="status"></div>

    </div>
  </div>
</div>
返回

return view('products.parse');

但这只是将我的错误改为419。我认为它与CSRF字段有关,但我不确定如何包含它,因为我的html不是表单,只是有表单元素。为什么我的路线返回404或419错误,我该如何解决这个问题?

您走错了路线。这个变量

var url = "/products/parse.blade.php"; 
应该是这个吗

var url = "/products/parse";
您想调用此处定义的路由

Route::post('/products/parse', 'ProductController@parse'); 
您试图调用路由返回的刀片文件,这不是正确的方法。另外,该文件不在您的公共目录中


你可以试着用它来代替。它看起来像这样:

document.getElementById("status").innerHTML = 'processing...'
let form = new FormData()

form.set('one', '1')
form.set('two', '2')

fetch(url, {
  method: 'POST',
  // Credentials may or may not be required. 
  // It depends if cookies are needed or not.
  credentials: 'include',
  body: form,
  headers: {
    'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
  }
}).then(response => response.text())
  .then(text => {
    document.getElementById("status").innerHTML = text
  })
$('meta[name="csrf-token"]').attr('content')

您发布到错误的URL

一定是这样的:

var url="/products/parse";
您还需要发送CSRF令牌(否则会导致419错误),如下所述:

将此元标记放入您的
标记中:

<meta name="csrf-token" content="{{ csrf_token() }}">

CSRF令牌不会导致错误404@GetOffMyLawn是的,但他没有发布CSRF令牌,所以这会导致另一个问题。CSRF令牌并不总是必需的。@GetOffMyLawn显然,他没有编写API,所以需要CSRF令牌,除非他禁用了CSRFprotection@hoolakoola你试过使用inestead吗?@GetOffMyLawn使用原始XHR不会导致419错误:)正如我所说,CRRF令牌是problem@HamidrezaKalantari看起来你是对的@HamidrezaKalantari是的,这就是问题所在,我添加了
hr.setRequestHeader(“X-CSRF-TOKEN”,$('meta[name=“CSRF-TOKEN”]”).attr(“内容”),它解决了这个问题。谢谢你们两位。
$('meta[name="csrf-token"]').attr('content')