更准确地说,问题甚至不是如何发送,而是为什么不发送给我。
简而言之:有一个带有表单的弹出窗口:
(HTML)
<div class="popup__form">
<form action="" class="form__popup__window" id="form_popup_send" autocomplete="off">
<input type="text" name="experiment_num" placeholder="Exp. Number" required/>
<input type="text" name="creature_name" class="creature-name" placeholder="Creature name" required/>
<input type="text" name="description_expirement" class="about-exp" placeholder="About experiment:" required/>
<input type="text" name="description_creature" class="about-exp" placeholder="About creature:" required/>
<input type="number" name="upload" class="upload" placeholder="upload?" min="0" max="1" required/>
<button class="btn btn-outline-danger" id="form_sub">CREATE</button>
</form>
<div id="err-cons"></div>
</div>
输入所有输入时,“CREATE”按钮被戳,从逻辑上讲,魔术(ajax)应该出现在 JS 文件中,并且使用 JQuery,从输入中获取所有信息并将其扔到服务器上。
JS文件:
$('#add_doc').click(function() { //Это я делаю для попапа(на кнопку показываться). Не важно
document.getElementById('popup').className += " visibill";
})
$(document).ready(function() { //То, что волнует.
$('#form_sub').submit(function() {
$.ajax({
type: "POST",
url: "http://documentation/documentsoneserver",
data: $('#form_popup_send').serialize()
}).done(function(response) {
console.log(response);
});
return false;
});
});
$('.popup__close').click(function() { //Это попап скрывает. Не важно
document.getElementById('popup').classList.remove("visibill");
})
问题是它不滚动。我在 siteController 中创建了一个变量,我试图转储它,但它返回 NULL。
PHP 文件
public function actionDocumentsoneserver() {
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$data = Yii::$app->request->post();
$data = $data['data'];
var_dump($data);
return;
}
我知道我不是最细心的人,所以如果你想通过找到一个缺少的分号来覆盖我 3 层楼,那么我理解。
PS:还要注意我使用了另一种形式的 AJAX 提交。
再次是 JS 文件和另一个提交表单:
let formSub = document.getElementById('form_sub');
formSub.addEventListener('click', function(){
$.post('/documentsoneserver',
{data: $('.form__popup__window').serialize()},
function(result) {
console.log($('.form__popup__window').serialize());
$('#form_sub').submit(function (e) {
e.preventDefault(); //Почему-то по нажатию кнопки "CREATE", форма перезагружает страницу. Вроде эта функция должна была это исправить, но, видимо, не судьба.
});
});
})
这里的问题很简单,而且有点看不见。
此刻,当按钮被点击时,并没有发生ajax请求,而是提交了表单并重新加载了页面。此外,由于 表单中没有指定方法,默认方法是
GET. 结果,POST服务器上的方法中没有任何内容是合乎逻辑的。为什么提交而不是ajax?更多关于底部的内容。
要更正错误,您需要更正js中的行并改为编写
像这样:
因为 必须指定表单的 ID,因为 该事件
submit适用于表单,现在它挂在按钮上,没有任何反应。当然,您可以制作一个带有类型的按钮,
button然后这样做:然后它也会起作用。