【问题标题】:jQuery AJAX post data gets lost because of routing in laravel由于 laravel 中的路由,jQuery AJAX 发布数据丢失
【发布时间】:2014-04-17 18:24:04
【问题描述】:

我正在尝试使用 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}}

所以我猜我的路由有问题,导致数据丢失。但是我不知道它可能是什么。在任何地方都找不到它的详细信息

【问题讨论】:

  • 网址的值是多少?

标签: javascript php jquery ajax laravel


【解决方案1】:

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

您的 vote_down 函数需要参数 $codesnip_id

votedDown($codesnip_id)

但在您的路线中,您没有像为 vote_up 那样传递任何参数

所以改为从发布的表单数据中获取 $codesnip_id,因为 ajax 将数据作为 POST 数据而不是作为 url 的一部分传递

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

【讨论】:

    【解决方案2】:

    这是你的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

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 2013-10-31
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2017-11-27
      • 2017-12-05
      • 2019-10-29
      • 1970-01-01
      相关资源
      最近更新 更多