使用jquery发布json字符串时不会触发的事件

Events not triggered when posting json string using jquery

本文关键字:事件 jquery 发布 json 字符串 使用      更新时间:2023-09-26

我对这个完全陌生,所以如果我没有正确解释这个,请道歉。

我想以json格式发布一些数据到rest服务。我试图得到这个工作与JQuery在一个简单的。cshtml(剃刀)页面。

我的json字符串是这样的:

{
   "ListRequest":{
      "Values":[
         {
            "Name":"SC",
            "Value":"PRO001"
         },
         {
            "Name":"PC",
            "Value":"Z0R14"
         }
      ]
}

}

我需要从一个表单传递2个值到这个字符串,然后发布它,但我不知道我如何在javascript中声明这一点,然后发布到我的$。发布函数。

我的HTML是这样的:

<form action="/" id="getListForm">
    <input type="text" name="txtSC">
    <input type="text" name="txtPC">
    <input type="submit" value="Get List">
</form>

我想我应该声明一个var:

var jsonText = '{"ListRequest":{ "Values":[' +
'{"Name":"SC", "Value":"' + $form.find("input[name='txtSC']").val() + '"},' +
'{"Name":"PC","Value":"' + $form.find("input[name='txtPC']").val() + '"}]}}';

这是正确的处理方式吗??

然后我有我的"邮政"代码测试:

var posting = $.post( url, term);
posting.done(function (data) {
    var content = $(data).find("#content");
    $("#result").empty().append(content);
});

但是每当我调用这个,它把这两个值作为查询字符串的一部分,而不是做一个实际的帖子,这些数据在url中不可见。

http://localhost/WebTest/WebDataService.svc/GetList?txtSC=brc001&txtPC=12345
谁能告诉我怎么解决这个问题?

谢谢。

更新:

这是我的测试页面的完整代码,因为它仍然不为我工作。我只是注意到提交事件没有被触发。它似乎是把文本框和值自动,因为它们是表单的一部分,但我的事件绝对不会触发,因为我刚刚评论了所有的代码,并把一个警告('test');但是它没有出现。

任何想法?

谢谢。

<script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.5.js" type="text/javascript"></script>
<script type="text/javascript">
// Attach a submit handler to the form
$("#getListForm").submit(function (event) {
    event.preventDefault();
    //var jsonText = '{"ListRequest":{ "Values":[' +
    //       '{"Name":"SC", "Value":"' + $form.find("input[name='txtSC']").val() + '"},' +
    //       '{"Name":"PC","Value":"' + $form.find("input[name='txtPC']").val() + '"}]}}';

    var obj = {
        ListRequest: {
            Values: [
                 {
                     Name: "SC",
                     Value: $('input[name="txtSC"]').val()
                 },
                 {
                     Name: "PC",
                     Value: $('input[name="txtPC"]').val()
                 }
            ]
        }
    }

    var jsonObj = JSON.stringify(obj);
    var $form = $(this), term = jsonText, url = 'http://localhost/WebTest/DataService.svc';
    $.post(url + '/GetList', jsonObj,
    function (data, status) {
    alert("Data: " + data + "'nStatus: " + status);
    });
    // Send the data using post
    //var posting = $.post( url, term);
    //posting.done(function (data) {
    //    var content = $(data).find("#content");
    //    $("#result").empty().append(content);
    //});
});
</script>
@{
    ViewBag.Title = "Json Test";
}
<hgroup class="title">
    <h1>@ViewBag.Title.</h1>
    <h2>@ViewBag.Message</h2>
</hgroup>

<form id="getListForm">
    <input type="text" name="txtSC">
    <input type="text" name="txtPC">
    <input type="submit" value="Get List">
</form>
<div id="result"></div>

谢谢。

更新:

最新的代码,我已经更新了术语使用jsonObj,我已经把我的代码在$(文档)。建议的就绪块:

<script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.5.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
    // Attach a submit handler to the form
    $("#getDocumentListForm").submit(function (event) {
        event.preventDefault();
        alert('test1');
        var obj = {
            ListRequest: {
                Values: [
                     {
                         Name: "SC",
                         Value: $('input[name="txtSC"]').val()
                     },
                     {
                         Name: "PO",
                         Value: $('input[name="txtPC"]').val()
                     }
                ]
            }
        }

            var jsonObj = JSON.stringify(obj);
            var $form = $(this), term = jsonObj, url = 'http://localhost/WebTest/DataService.svc';
            alert(term);
            alert(url);
            $.post(url + 'GetList', jsonObj,
            function (data, status) {
                alert("Data: " + data + "'nStatus: " + status);
            });
            //Tried posting using term but no luck. Same problem.
            //$.post(url + 'GetList',
            //function (data, status) {
            //    alert("Data: " + data + "'nStatus: " + status);
            //});
            // Send the data using post
            //var posting = $.post(url, term);
            //posting.done(function (data) {
            //    //var content = $(data).find("#content");
            //    //$("#result").empty().append(content);
            //    alert(data)
            //});
            alert('test2');
        });
    });
</script>
@{
    ViewBag.Title = "Test";
}
<hgroup class="title">
    <h1>@ViewBag.Title.</h1>
    <h2>@ViewBag.Message</h2>
</hgroup>

<form id="getDocumentListForm">
    <input type="text" name="txtSC">
    <input type="text" name="txtPC">
    <input type="submit" value="Get Document List">
</form>
<div id="result"></div>

关于这个问题的更新

确保:

  1. 不使用IE11和JQUERY,至少JQUERY 2.1.1!

  2. 始终使用其他浏览器进行测试

  3. 确保你的JQUERY SRC设置为正确的HTTP或HTTPS取决于你使用的。

我想发生的事情是,你试图传递一个未定义的变量命名为term而不是jsonText,所以javascript代码抛出一个未捕获的异常并被忽略,你从你的form元素得到一个正常的动作。

应该传递正确的数据。而且,了解 JSON.stringify 可能会为您节省大量时间和头痛;)。你可以这样构建你的对象:

var obj = {
    ListRequest: {
        Values: [
             { 
                 Name:  "SC",
                 Value: $('input[name="txtSC"]').val()
             },
             {
                 Name:  "PC",
                 Value: $('input[name="txtPC"]').val()
             }
        ]
    }
};
var jsonObj = JSON.stringify(obj);

我能想到的另一个陷阱在你的代码,是你已经绑定你的AJAX的click事件在你的提交按钮,或onsubmit事件,而你不是preventDefault() ing

编辑

给出你发布的代码,你有几个错误:

    你把你的代码包装成jQuery(document).ready()块了吗?
  1. 你注释掉了jsonText,但仍然将其分配给变量term,导致未捕获的异常。

修复这两件事,你的POST请求将正确完成。

另一方面,你到底为什么要使用jQuery 1.5版本?