由于laravel中的路由,jQuery AJAX发布数据丢失了

时间:2014-04-17 18:24:05

标签: javascript php jquery ajax laravel

我正在尝试使用ajax将ID传递给PHP脚本。使用以下内容时效果很好:

var baseURL = '/W4W/public/';

function voteUp(){
    var snippetID = document.getElementById('snippetID').innerHTML;
voteThing('vote_up', snippetID);
}

function voteThing(URL, snippetID){
$.ajax({
    type: "POST",
    url: URL,
    data: {codesnip_id: snippetID},
    success: function(data) {
                    $.ajax({
            type: "POST",
            url: "updateVotes",
            data: {codesnip_id: snippetID}
            success: function(data1) {}
        });
        }
    }); 
}

PHP路由和PHP脚本:

Route::post('codesnippet/{codesnip_id}/vote_up', array('uses' => 'VoteController@votedUp'));

public function votedDown($codesnip_id){
        // Some irrelevant code for this issue
}

但是当我改为使用以下路线时:

Route::post('vote_down', array('uses' => 'VoteController@votedDown'));

以及以下javascript:

function voteDown(){
    var snippet_ID = document.getElementById('snippetID').innerHTML;
    URLS = baseURL + 'vote_down';
    voteThing(URLS, snippet_ID);

数据永远不会到达PHP脚本。我收到以下错误:     }

{"error":{"type":"ErrorException","message":"Missing argument 1 for VoteController::votedDown()","file":"C:\\wamp\\www\\W4W\\app\\controllers\\VoteController.php","line":69}}

所以我猜我在路由方面做错了,导致数据丢失。但是我想出它可能是什么。

无法找到并具体说明

2 个答案:

答案 0 :(得分:0)

数据到达你的php脚本,因为你的php脚本抛出异常,

你的vote_down函数需要参数$ codesnip_id

votedDown($codesnip_id)

但是在你的路线中,你没有像你为vote_up那样传递任何论据

因此,从发布的formdata获取$ codesnip_id,因为ajax将数据作为POST数据传递而不是作为url的一部分

votedDown() {
   $codesnip_id=$_POST['codesnip_id'];
   ...
}

答案 1 :(得分:0)

这是您的votedDown方法

public function votedDown($codesnip_id){
    // Some irrelevant code for this issue
}

根据您的错误消息,您没有通过所需的参数,因此请使用url作为第二个参数传递参数,使用类似的内容:

var snippet_ID = document.getElementById('snippetID').innerHTML;
URLS = baseURL + 'vote_down/' + snippet_ID;
voteThing(URLS);

在这种情况下,路线应为:

Route::post('vote_down/{id}', array('uses' => 'VoteController@votedDown'));

或者,您可以在现在通过时将其传递给POST但是从方法中移除$codesnip_id,所以它可能是:

public function votedDown(){
    $codesnip_id = Input::get('snippet_ID');
}

在这种情况下,snippet_ID应该像'snippet_ID=' + snippet_ID