MethodNotAllowedHttpException in Laravel 5


MethodNotAllowedHttpException in Laravel 5

Routes.php

Route::post('deactivatecountry', array(
            'as'   => 'deactivatecountry', 
            'uses' => 'CountriesController@deactivateCountry'
));
Route::post('deactivatestate', array(
            'as'   => 'deactivatestate', 
            'uses' => 'StatesController@deactivateState'
));

Javascript

function deactivateCountry(country_id) {
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {}
    }
    xmlhttp.open("POST","deactivatecountry", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("country_id=" + country_id);
}
function deactivateState(state_id) {
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {}
    }
    xmlhttp.open("POST","deactivatestate", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("state_id=" + state_id);
}

当我的javascript中的deactivateCountry函数被调用时,代码运行得非常好。它调用CountrysController中的deactivateCountry方法,并按预期停用国家/地区。

但是当我调用deactivateState函数时,它会抛出一个MethodNotAllowedHttpException,我不知道为什么。

国家和国家都有相同的路线,职能相似,但一个有效,另一个无效。

有人能帮我做这个吗?我已经坐了几个小时了,我不明白为什么会发生这种情况

这是我调用deactiveState方法时遇到的错误

1/1
MethodNotAllowedHttpException in RouteCollection.php line 207:
in RouteCollection.php line 207
at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 194
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 142
at RouteCollection->match(object(Request)) in Router.php line 716
at Router->findRoute(object(Request)) in Router.php line 642
at Router->dispatchToRoute(object(Request)) in Router.php line 618
at Router->dispatch(object(Request)) in Kernel.php line 160
at Kernel->Illuminate'Foundation'Http'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in VerifyCsrfToken.php line 43
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 111
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53

@MarcinNabiałek和@lukasgeiter。感谢你们花时间和耐心回答这个问题。我已经能够解决这个问题了。我所做的更改是在javascript

function deactivateCountry(country_id) {
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {}
    }
    xmlhttp.open("POST","/deactivatecountry", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("country_id=" + country_id);
}
function deactivateState(state_id) {
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {}
    }
    xmlhttp.open("POST","/deactivatestate", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("state_id=" + state_id);
}

我在路线前面加了一个/。所以在xmlhttp.open中,我将其从xmlhttp.open("POST","deactivatestate", true);更改为xmlhttp.open("POST","/deactivatestate", true);

当我检查xmlhttp请求的POST url时,我得到了这个位置,我与我指定的url不同,这就是为什么Laravel认为这是一个GET请求而不是POST。