AJAX使用SerializeArray检索值 - [Laravel]

时间:2018-01-04 04:19:13

标签: php ajax laravel laravel-5 laravel-4

我正在进行表单提交,并希望将表单信息传递给控制器​​,但是当我执行serializeArray时,我无法访问控制器中的任何信息。

<form class="#" action="#" method="post" id="addLink">
    <input class="form-control full-width" type="text" name="link"></input>
    <input type="submit" value="Add">
</form>


$('#addLink').on('submit', function(e) {
    e.preventDefault();

    var ser = $(this).serializeArray();
    var csrf = "{{ csrf_token() }}"

    $.ajax({
        url: '/profile/addlink',
        type: 'post',
        dataType: 'json',
        headers: {
            'X-CSRF-TOKEN': csrf,
        },
        data: {
            "_token": csrf,
            data : ser
        },
        success: function(data) {
         console.log(data)
        },
        error: function(data){
         console.log('error');
        },
    });

});

控制器

public function addLink(Request $request)
{
    $result = json_encode($request->data, true);
    echo json_encode($result);
}

结果:

[{"name":"link","value":"http:\/\/test.com"}]

我想提取'链接'

2 个答案:

答案 0 :(得分:2)

您需要json_decode()来提取值,在发送数据时,您应该使用JSON.stringify()。所以代码应该是:

JS代码:

data: JSON.stringify(ser);

PHP代码:

$result = json_decode($request->data, true);
print_r($result); // array of values

答案 1 :(得分:1)

您可以在JS中使用serialize()而不是serializeArray()

var ser = $(this).serialize();

导致以

的格式发送数据
link=value

在您的控制器中,您可以使用parse_str()

提取link
parse_str($request->data, $output);
echo $output['link']; // Here you could get the link's value