JavaScript 表单使用 Ajax 和 Laravel 路由提交到数据库

Posted

技术标签:

【中文标题】JavaScript 表单使用 Ajax 和 Laravel 路由提交到数据库【英文标题】:JavaScript form submit to database using Ajax and Laravel route 【发布时间】:2015-07-11 06:35:57 【问题描述】:

我正在使用Laravel, javascript and Ajax 制作一个测验网站,并使用 JavaScript 制作了一个添加表单功能,如下所示:

但我想在失去对表单的关注或输入后,使用 Ajax 将表单数据(以创建新的测验问题)发送到我的 Laravel QuizController 路由中。 但我不知道该怎么做。


我的 JavaScript/Ajax:

var limit = 1;
var count = 0;
var myButton = document.getElementById('myButton');
var container = document.getElementById('container');


function createQuestion() 

if(count < limit) 
    var input = document.createElement("input");
    input.type = 'text';
    input.id = '';
    input.setAttribute('class', 'form-control')
    container.appendChild(input);
    count++;

else 
    alert ('Enter this question first before you can add another question!');




function storeQuestion() 
var xmlhttp;
if (window.XMLHttpRequest)
// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();

else
// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.onreadystatechange=function()

    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    
        //
    

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();


我的 Laravel.blade:

<div class="form-group">
        <div id="container"></div>
    </div>

    !! Form::button('Add Quiz', array('onclick' => 'createQuiz()', 'class' => 'btn btn-default', 'id' => 'myButton', 'value' => 'Add question')) !!

我的问题控制器:

public function store(Quiz $quiz)

    $input = Input::all();
    $input['quiz_id'] = $quiz->id;
    Question::create($input);

    return Redirect::route('quizzes.show', $quiz->slug)->with('message', 'Question created.');

我希望有人可以帮助我,因为我已经被这个问题困扰了一段时间..

【问题讨论】:

【参考方案1】:

要使用 AJAX 而不是标准的 HTTP POST,您应该捕获 enter 和 blur 事件。

input type text and onKeyDown not working under IE 的第一个答案中解释了如何捕获输入,但在测试输入时您应该运行 storeQuestion

添加模糊添加:

<input type="text" name="item_code" onkeydown="test(event)" onblur="storeQuestion()">

您的 store 函数不应返回 Redirect::route 而是一些状态代码或 JSON 字符串。如果你使用 laravel 4 http://laravel.com/api/4.1/Illuminate/Http/JsonResponse.html 那只会说“OK”或 true 或 error

您应该修改 storeQuestion 以将新的回答/编辑/删除按钮也添加到列表中。 ( // )

一种更简单的方法是不使用 AJAX,而是通过将 onblur 事件处理程序附加到文本框来在失去焦点后使用 javascript 提交表单。

【讨论】:

这是学校的作业,我们需要使用 AJAX 将表单发送到数据库中 和 xmlhttp.open("GET","ajax_info.txt",true);恐怕不好。你应该从控制器调用存储路由/函数【参考方案2】:

var req = new XMLHttpRequest();

queryString = "access_token=" + access_token + "&data=" + 数据;

req3.open('GET', '/path/of/laravel/route?' + queryString, true);

req3.send(queryString)

【讨论】:

以上是关于JavaScript 表单使用 Ajax 和 Laravel 路由提交到数据库的主要内容,如果未能解决你的问题,请参考以下文章

javascript表单的Ajax 提交插件的使用

使用触发 javascript 验证的 POST 表单和 AJAX 登录到 PHP 文件。无法将数据存储到 PHP

在javascript-ajax中提交表单时如何显示进度条

使用 javascript 没有 jQuery 的简单 ajax 表单

Javascript - 根据ajax响应停止表单提交[重复]

使用javascript发布表单(非Ajax)