【问题标题】:jQuery Mobile submit with PHP without AJAX and JavaScriptjQuery Mobile 使用 PHP 提交,没有 AJAX 和 JavaScript
【发布时间】:2014-04-14 02:09:34
【问题描述】:

抱歉,我认为自己是 jQuery Mobile 的真正新手。关于JavaScript,我一点也不擅长。事情就是这样。我想在不使用 AJAX 的情况下构建一个 jQuery Mobile 网站。只想要 jQuery Mobile 的漂亮设计,然后使用 PHP 提交表单等。

我尝试构建一个将名字和姓氏提交到 MySQL 数据库的简单页面。它将提交,告诉用户它已提交,然后用户可以按 [Page 2] 来查看所有结果。现在我使用 if(isset()) 来显示消息并使用 else 来显示表单。因此,进入网站的用户会得到表单,当按下[提交]时,他/她会得到名字和姓氏已提交的消息。然后按 [Page 2] 按钮查看所有名字和姓氏。

PHP (index.php)

if(isset($_POST['send'])) {

    $insert = $db->prepare("INSERT INTO name (fname, lname) VALUES(:fname, :lname)");
    $insert_array = array(
        ":fname" => $_POST['fname'],
        ":lname" => $_POST['lname']
    );

    $insert->execute($insert_array);

    $db = NULL;

    echo $_POST['fname'] . ' ' . $_POST['lname'] . ' was added!<br><br>';
}

else {
    echo '
    <form method="post" data-ajax="false">

        First name:
        <input type="text" name="fname"><br>

        Last name:
        <input type="text" name="lname"><br>

        <input type="submit" name="send" value="Add">

    </form><br>';
}

<a href="page2.php" data-role="button">Page 2</a>

PHP (page2.php):

$query = $db->query("SELECT * FROM name");

while($row = $query->fetch(PDO::FETCH_ASSOC)) {
    echo $row['fname'] . ' ' . $row['lname'] . '<br>';
}

$db = NULL;

echo '<a href="index.php" data-role="button">Index</a>';

假设我输入“Test”作为名字和姓氏。它将回显“添加了测试测试!”。如果我现在按 [Page 2],我将看到添加了“Test Test”。 但是当我按下 [Index] 返回时,我希望它再次显示表单,但消息“已添加测试测试!”再次显示而不是表单,为什么?我必须更新页面才能获取表单。现在,如果我启用 data-ajax,它正在使用提交和后退按钮。 但是 然后我必须在 page2.php 上按更新,当我到达那里时才能看到所有的名字和姓氏。我是否让自己明白问题所在?

抱歉,在 jQuery Mobile 上真的很新,我在 Google 上找不到答案。每个人都在使用 JavaScript 提交数据。有可能这样还是我必须学习 JavaScript 才能提交表单?在某处阅读使用按钮而不是提交按钮会影响它。

提前致谢! :)

【问题讨论】:

  • 这似乎是一件很奇怪的事情。 jQuery mobile 与 jQuery 和 AJAX 功能紧密相连。如果您想要相同的外观和感觉,您可以复制其中的 CSS 部分并手动构建您自己的 HTML 元素以使用这些类,但即使这样也不会提供相同的整体体验。
  • 感谢您的回答。好的,如果我想要外观和体验,我需要做什么?我需要使用 JavaScript 来序列化等吗?我需要 HTML 文件、PHP 文件和 JS 文件来构建一个函数吗?我喜欢 PHP,因为它很简单。我可以将所有内容都放在一个文件中。是的,我知道我也可以使用 jQuery Mobile 将所有内容放在一个文件中,但大多数人都在谈论一个 HTML 文件是最好的。将代码分成更小的部分不是更容易吗?

标签: javascript php jquery html ajax


【解决方案1】:

我认为您希望在请求后修改 DOM?所以发布表单,添加用户然后显示结果,而无需单击按钮。

所以在你的 ajax 调用中使用 done 函数来隐藏表单并显示结果。

看看下面,如果有帮助,请告诉我。

编辑:为按钮添加了 .on 点击​​。您可能还想查看在输入中添加按键检查器或在表单上添加 onsubmit。

<div id="content">
<?php
if(isset($_POST['send'])) {

    $insert = $db->prepare("INSERT INTO name (fname, lname) VALUES(:fname, :lname)");
    $insert_array = array(
        ":fname" => $_POST['fname'],
        ":lname" => $_POST['lname']
    );

    $insert->execute($insert_array);

    $db = NULL;

    echo $_POST['fname'] . ' ' . $_POST['lname'] . ' was added!<br><br>';
}

else {
    echo '
    <form method="post" data-ajax="false" id="contentForm">

        First name:
        <input type="text" name="fname"><br>

        Last name:
        <input type="text" name="lname"><br>

        <input type="submit" name="send" value="Add" id="sendButton">

    </form><br>';
}
?>
</div>

<script type='text/javascript'>
<!-- https://api.jquery.com/jQuery.ajax/ -->
$('#sendButton').on("click", function(){ 
    $.ajax({
      type: "POST",
      url: "page2.php",
      data: $('#contentForm').serialize()
    })
      .done(function( msg ) {
        $('#content').html( msg );
    });
});
</script>

【讨论】:

  • 嗯,它不起作用。 :( 什么是 DOM?我必须使用序列化等吗?无论如何,我试过了,没有运气。我可以看到表单闪烁然后消失。我不能只使用普通的 PHP 和 if(isset()) 来检查按钮是否被按下?为什么当我返回时文本仍然可见?不应该,因为如果按下按钮,消息才会可见。我不明白。
  • 抱歉再试一次,我在按钮上加了一个onpress。它只是在之前加载页面时触发。
  • 嗯,不行。现在页面的工作方式与以前完全一样。当我返回 index.php 时,该消息仍然可见。
  • 如果添加 unset($_POST['send']);插入之后它可能会起作用,除非在使用 JQuery Mobile 时有其他东西发布发送。
  • 您也可以尝试使用上面的代码将表单从 method="post" 更改为 method="get"。因为 AJAX 调用是发布的,所以它应该可以工作,但是如果 JQuery mobile 接管并提交表单,那么它将(希望)使用 get 来完成它,您将看到该表单。只是另一个建议,看看发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2011-12-22
  • 2019-07-31
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多