【发布时间】:2016-09-06 17:31:54
【问题描述】:
我有一个 HTML 表单,在从外部源提取数据后,我用 javascript 动态填充了该表单,但是我遇到了一个问题,即通过 javascript 放入表单的数据似乎没有发布到我的php 脚本(将其插入 SQL)。如果我手动将数据输入表单,它会很好地发布,只有当 JS 填写表单时它才不起作用。如何让表单成功发布通过 JS 放入其中的数据?
(ps。我是新手,对于我可能遇到的任何基本错误,我深表歉意!)
表格:
<form id="metadata_form" action="sql_import.php" method="post" enctype="multipart/form-data">
<!--File upload-->
<label for="file"><span>Filename:</span></label>
<input type="file" name="file" id="file" />
<br />
<!--Metadata input-->
<label class="form_label" for="title">Title:</label> <input type="text" id="title" name="movie_title" class="form_input"> <br><br>
<label class="form_label" for="plot">Plot:</label><br> <textarea id="plot" name="movie_desc" style="width: 95%; height: 125px;"></textarea>
<label class="form_label" for="runtime">Runtime:</label> <input type="text" id="runtime" name="runtime" class="form_input"> <br><br>
<label class="form_label" for="released">Release date:</label> <input type="text" id="released" name="release_dt" class="form_input"> <br><br>
<label class="form_label" for="rated">Rated:</label> <input type="text" id="rated" name="rated" class="form_input"> <br><br>
<label class="form_label" for="imdbid">IMDb Link:</label> <input type="text" id="imdbid" name="imdb_lk" class="form_input"> <br><br>
<label class="form_label" for="poster">Poster URL:</label> <input type="text" id="poster" name="poster_url" class="form_input"> <br><br>
Poster Preview:<br> <div class="poster" style="width:auto;"><img src=""></div> <br><br>
<input type="submit" value="Confirm" style="float:right; clear:both;"/>
</form>
Javascript:
<script type="text/javascript">
$(window).load(function(){
var $Form = $('#search_form'), $Container = $('#container');
$Container.hide();
$Form.on('submit', function(p_oEvent){
var sUrl, sMovie, oData;
p_oEvent.preventDefault();
sMovie = $Form.find('input').val();
sUrl = 'https://www.omdbapi.com/?t=' + sMovie + '&type=movie&plot=full'
$.ajax(sUrl, {
complete: function(p_oXHR, p_sStatus){
oData = $.parseJSON(p_oXHR.responseText);
console.log(oData);
//output data to form
document.getElementById('title').value = (oData.Title);
document.getElementById('plot').value = (oData.Plot);
document.getElementById('runtime').value = (oData.Runtime);
document.getElementById('released').value = (oData.Released);
document.getElementById('rated').value = (oData.Rated);
document.getElementById('imdbid').value = ('http://www.imdb.com/title/' + oData.imdbID + '');
document.getElementById('poster').value = (oData.Poster);
$Container.find('.poster').html('<img src="' + oData.Poster + '"/>');
$Container.show();
}
});
});
});
</script>
PHP:
//Grab data from input form
$movie_title = $_POST['movie_title'];
$movie_desc = $_POST['movie_desc'];
$runtime = $_POST['runtime'];
$release_dt = $_POST['release_dt'];
$rated = $_POST['rated'];
$imdb_lk = $_POST['imdb_lk'];
$poster_url = $_POST['poster_url'];
//Insert query
$query = "INSERT INTO movies (movie_title, movie_desc, release_dt, rated, imdb_lk, thumbnail_path) VALUES ('$movie_title', '$movie_desc', '$release_dt', '$rated', '$imdb_lk', '$poster_url')";
$result = mysqli_query($db, $query);
【问题讨论】:
-
用户提交表单时,您的数据似乎已被填充,对吧?为什么?这对我来说是一种奇怪的行为。无论如何,您的数据没有被提交,因为您的 ajax 请求是异步的,并且在提交表单时,请求尚未完成。
-
先提交了一个不同的表单,它运行 JS 来填充第二个表单
-
因此情况发生了很大变化。如果可能,请发布您的完整代码。
标签: javascript php html forms post