【问题标题】:Simple Form Submit in Jquery MobileJquery Mobile 中的简单表单提交
【发布时间】:2013-02-21 01:13:56
【问题描述】:

我正在尝试使用对 asp.net 网络服务的 ajax 调用提交一个简单的表单,但我在提交表单时收到“错误”警报。谁能告诉我下面的代码有什么问题。

HTML:

<html> 
    <head> 
    <title>Facility</title> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
</head> 
<body> 

<div data-role="page" id="arealistpage">

  <div data-role="header" data-theme="b">
      <a href="Facility.aspx" class='ui-btn-left ui-btn-back' data-icon='arrow-l' rel="external">Back</a>
   </div><!-- /header -->

    <div data-role="content">  
  <form id="form1" data-ajax="false" method="post">
    <div id="AreaNoDiv" data-role="fieldcontain" class="field">
        <label for="Facility">Facility*</label>     
        <input id="Facility" name="shipNo_r" type="text" required/>
    </div>

     <div id="desDiv" data-role="fieldcontain" class="field">

        <label for="des" id="Label1" name="fnameLabel">Description*</label>     
        <input id="des" name="fname_r" type="text" required/>

    </div>
     <div id="submitDiv" data-role="fieldcontain" style="width: 30%">    
     <input type="submit" value="Add Facility" data-inline="true" id="submit"/>
    </div>

    </form>

    </div><!-- /content -->

    <div data-role="footer" data-theme="b" data-position="fixed">

            <div data-role="navbar">
            <ul>

               <li><a href="" data-role="tab" data-icon="arrow-u" class="returnTopAction">Top</a></li>
            </ul>
        </div>
    </div>
</div><!-- /page -->
<script src="Submitscript.js" type="text/javascript"></script>
</body>
</html>

表单提交脚本:

$("#form1").submit(function () {
    var serviceURL = 'service1.asmx/SubmitList';
    var name = "chamara";
    $.ajax({
        type: "POST",
        url: serviceURL,
        data: '{"name":"' + name + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: successFunc,
        error: errorFunc
    });

    function successFunc(data, status) {

        // parse it as object
        var outStr = JSON.parse(data.d);
        alert(outStr);
    }

    function errorFunc() {
        alert('error');
    }
});

网络服务:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]

  public class Service1 : System.Web.Services.WebService {

    [WebMethod]
    public string SubmitList(string name)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string str = "Your Name is"+name;
        string jsonString = serializer.Serialize(str);
        return jsonString;
    }

}

更新: 表单提交后的导航页面

<html> 
    <head> 
    <title>Facility</title> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
 <script type="text/javascript">
     $('#arealistpage').live('pageshow', function (event) {
         $('div[id="primaryList"] ul[data-role="listview"] a').bind("click", function () {
             var facilityid = $(this).data("facilityid");
             sessionStorage.facilityid = facilityid;
            });
     });
</script>

</head> 
<body> 

<div data-role="page" id="arealistpage">

  <div data-role="header" data-theme="b">
        <h1><a name="top"></a>Facility</h1>
       <a href="../MenuePages/Dictionaries.aspx" class='ui-btn-left ui-btn-back' data-icon='arrow-l' rel="external">Back</a>
   <a href="AddFacility.aspx" data-role="button" data-icon="plus" data-theme="d" style="float:left;"  rel="external" data-transition="slide" data-ajax="false">Add</a>
    </div><!-- /header -->

    <div data-role="content">  
     <div id="primaryList">
    <ul data-role="listview" data-inset="true" data-theme="c"  data-filter="true" id="areaList" data-split-icon="gear" data-split-theme="d">

    </ul>

        </div>
    </div><!-- /content -->

    <div data-role="footer" data-theme="b" data-position="fixed">

            <div data-role="navbar">
            <ul>

               <li><a href="" data-role="tab" data-icon="arrow-u" class="returnTopAction">Top</a></li>
            </ul>
        </div>
    </div>
   <script src="FacilityScript.js" type="text/javascript"></script>

</div><!-- /page -->
  <div data-role="page" id="dialog">
  <div data-role="header" data-theme="b">
    <h1>Options</h1>
  </div>   
 <ul data-role="listview" data-inset="false"
                data-theme="c">
               <li data-icon="false"><a href="UpdateFacility.aspx"  data-ajax="false">Edit</a></li>

              <li data-icon="false"><a href="#divMsg" data-rel="dialog" data-transition="pop">Delete</a></li>

            </ul>   
</div> 
<div data-role="page" id="divMsg">
  <div data-role="header" data-theme="b">
    <h1>Confirmation</h1>
  </div>   

  <div data-role="content">  
  <a href="Facility.aspx" onclick="DeleteFacility(); return true" data-role="button"  data-ajax="false">Delete Record?</a>
  </div>
   <script src="FacilityScript.js" type="text/javascript"></script>
</div>
</body>
</html>

【问题讨论】:

  • 您能否在提交表单时检查服务器日志以确保输入的内容和打印的内容(如果有的话)?

标签: jquery asp.net ajax forms jquery-mobile


【解决方案1】:

我将您的 html 更改如下

<html> 
    <head> 
    <title>Facility</title> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
</head> 
<body> 

<div data-role="page" id="arealistpage">

  <div data-role="header" data-theme="b">
      <a href="Facility.aspx" class='ui-btn-left ui-btn-back' data-icon='arrow-l' rel="external">Back</a>
   </div><!-- /header -->

    <div data-role="content">  
  <form id="form1" method="post">
    <div id="AreaNoDiv" data-role="fieldcontain" class="field">
        <label for="Facility">Facility*</label>     
        <input id="Facility" name="shipNo_r" type="text" required/>
    </div>

     <div id="desDiv" data-role="fieldcontain" class="field">

        <label for="des" id="Label1" name="fnameLabel">Description*</label>     
        <input id="des" name="fname_r" type="text" required/>

    </div>
     <div id="submitDiv" data-role="fieldcontain" style="width: 30%">    
     <button class="btnLogin" data-theme="b" type="submit" id='mysubmit'>submit</button>
    </div>

    </form>

    </div><!-- /content -->

    <div data-role="footer" data-theme="b" data-position="fixed">

            <div data-role="navbar">
            <ul>

               <li><a href="" data-role="tab" data-icon="arrow-u" class="returnTopAction">Top</a></li>
            </ul>
        </div>
    </div>
</div><!-- /page -->
<script src="Submitscript.js" type="text/javascript"></script>
</body>
</html>

你的js如下

$('#arealistpage').live('pageshow',function(event){
var serviceURL = 'service1.asmx/SubmitList';
    $('#mysubmit').bind('click', function(e){
        var name = "chamara";
        e.preventDefault();
            $.ajax({
            type: "POST",
            url: serviceURL,
            data: '{"name":"' + name + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: successFunc,
            error: errorFunc
        });
    });

    function successFunc(data, status) {

        // parse it as object
        var outStr = JSON.parse(data.d);
        alert(outStr);
    }

    function errorFunc() {
        alert('error');
    }
});

而且效果很好。

顺便说一句,你为什么要在你的服务中序列化一个字符串。当您想将 C# 对象转换为 JSON 字符串时,序列化将很有帮助。希望对你有所帮助。

【讨论】:

  • 嗨!谢谢您的帮助。你的解决方案正在工作,但有一个新问题。在表单提交上我有表单 action="Facility.aspx"。在那个表单上我正在使用对话框弹出窗口。表单提交后这些对话框不起作用。我有更新了我的问题,向您展示 Facility.aspx。
  • 你不能继续更新问题男人:) 你必须提出新问题。
  • 好的,谢谢。这是我的新问题。你能帮我解决吗stackoverflow.com/questions/15261618/…
【解决方案2】:

您的代码是正确的,所以我猜想在 ajax 调用期间会出现问题。

首先看看我的另一个答案,我做了一个 jQuery Mobile ajax 表单提交的工作示例:https://stackoverflow.com/a/15205612/1848600。我的例子使用了 PHP,但逻辑是一样的。

我的电话是这样的:

$.ajax({url: 'check.php',
    data: {action : 'login', formData : $('#check-user').serialize()}, // Convert a form to a JSON string representation
        type: 'post',                   
    async: true,
    beforeSend: function() {
        // This callback function will trigger before data is sent
        $.mobile.showPageLoadingMsg(true); // This will show ajax spinner
    },
    complete: function() {
        // This callback function will trigger on data sent/received complete
        $.mobile.hidePageLoadingMsg(); // This will hide ajax spinner
    },
    success: function (result) {
            resultObject.formSubmitionResult = result;
                        $.mobile.changePage("#second");
    },
    error: function (request,error) {
        // This callback function will trigger on unsuccessful action                
        alert('Network error has occurred please try again!');
    }
}); 

使用 Firebug 进行调试:

下一步应该是错误调试。

  • 如果您使用的是 Firefox 或 Chrome,请安装一个名为 Firebug 的插件。

    这是一个链接:https://addons.mozilla.org/en-US/firefox/addon/firebug/

  • 安装firebug,Firefox版本比Chrome版本好。

  • 打开您的页面和 Firebug 插件。

  • 在萤火虫窗口的顶部有一个标签栏,以控制台、HTML、CSS .. 直到 Cookies 开头。单击网络选项卡。新标签栏将在主标签栏下方打开。现在点击 XHR 标签并点击清除按钮(相同的标签栏,清除按钮在左侧)。

  • 点击提交表单。在萤火虫窗口内,一个新的日志行应该出现类似“POST ...”或“GET ...”的内容。点击它。

  • 将显示新内容。在新标签栏内有一个请求(或发布或获取)标签。这是你的要求。如果 ajax 调用已到达其目的地,则应存在另一个名为 Response 的选项卡。

  • 打开响应并查看。应该有像这样的 JSON 错误或真实响应:{"message":"0","draftSaved":true,"disableEditor":false}。如果您的响应具有正确的 JSON 输出而不是 ajax 调用是成功的。

使用 FIDLER 调试:

您甚至可以使用名为 FIDLER 的工具:http://www.fiddler2.com/fiddler2/,它是一个更好的工具,但需要更多时间来适应。

Fiddler 是一个 Web 调试代理,它记录所有 HTTP(S) 流量 在您的计算机和 Internet 之间。 Fiddler 允许您检查 所有 HTTP(S) 流量、设置断点和“摆弄”传入或 传出数据。 Fiddler 包含强大的基于事件的脚本 子系统,并且可以使用任何 .NET 语言进行扩展。

这里是 Fiddler 使用视频教程:http://www.youtube.com/watch?v=YkJ_Wsd-rtM

【讨论】:

    【解决方案3】:

    简单地使用标准按钮提交表单,为其编写点击函数,然后在完成验证后调用表单提交是否有问题?像这样简单的东西,我有一个名为“查询”的按钮

      $("#inquire").click(function () {
        if (validates()) {
            $("form").submit();
        } else showValidationErrors();
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多