我在将一个简单的变量从php传递到javascript文件时遇到了一些麻烦。
我有一个表单通过php文件提交,它基本上更新了服务器端的记录。如果更新成功,我只想将消息传递回javascript,我可以在页面的某个部分更新它。
我的代码是:
Javascript代码 - abc.js
function expand_cards(project, SlNo)
{
name = project['project_name'];
j = "ShowForm-"+SlNo+"";
s = "<div class='edit_project_card'>";
s += "<form method='post' action='Edit_Project.php'><div class='project_form'>
// Form Contents
s += "<div class='Form_button'> <input type='submit'> </div>";
s += "</form></div>";
$("#"+j+"").html(s);
response = $.parseJSON(data);
$("#"+j+"").html(response);
}
PHP文件 - Edit_Project.php
<?php
//The updation stuff at the server end
if (!mysqli_query($connection,$sqlquery)) {
$response = "'Error in your code: ' . mysqli_error($connection)";
}
else {
$response = "1 record updated";
}
echo json_encode($response);
mysqli_close($connection);
?>
但问题是屏幕正在打印$ response变量,并没有完全按照希望将其传递回javascript函数。我知道我可以使用$ .post函数,它可以接收参数,但它是一个很长的形式,并且传递参数很难。
有人可以帮助我吗?
由于
答案 0 :(得分:1)
很脏,但它会起作用:
<script type="text/javascript">
var my_var = <?php echo $some_variable; ?>
// Do something with the new my_var
some_func(my_var);
</script>
如果你能使用更好的AJAX,我不会做太多详细的事情。
请注意,这只适用于.php文件或正在读取的文件。
你会想要在php端做一些变量处理,因为如果字符串是空的,你最终会得到一个
var my_var = ;
会打破脚本。所以像:
var my_var = <?php echo "'" . $some_variable . "'";?>
如果它是一个字符串或者它是一个数字:
var my_var = <?php echo (empty($some_variable) ? null : $some_variable);
这是特定于int的,我相信你可以提出一个能更好地处理它的函数。
参考文献:
的简写答案 1 :(得分:0)
由于您直接将表单提交到PHP文件,因此浏览器会像正常页面一样加载Edit_Project.php
文件。如果您希望对已加载的页面进行json响应,则必须使用$.post
或$.ajax
你可以简单地使用serialize()发布整个表单:
$('#form_id').on('submit', function(e) { // Stop the browser from posting the form e.preventDefault(); // Post the form via Ajax $.ajax({ url : 'Edit_Project.php', type : 'POST', data : $(this).serialize(), success : function(response) { // Here you do the HTML update $("#"+j+"").html(response.reply); } }); });
还需要更改Edit_Project.php:
//The updation stuff at the server end if (!mysqli_query($connection,$sqlquery)) { $response = "'Error in your code: ' . mysqli_error($connection)"; } else { $response = "1 record updated"; } mysqli_close($connection); /* * As SuperDJ suggested, you need to tell the browser that it's * receiving a JSON ojbect although he did use the wrong content type: */ header('Content-Type: application/json'); /* * According to php.net most decoders should handle a simple string as * json object but to be safe always encode an array or an object since * you can't know how the decoder will respond. */ echo json_encode(array('reply' => $response));