使用jquery发布json字符串时不会触发的事件
Events not triggered when posting json string using jquery
我对这个完全陌生,所以如果我没有正确解释这个,请道歉。
我想以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>
关于这个问题的更新
确保:
不使用IE11和JQUERY,至少JQUERY 2.1.1!
始终使用其他浏览器进行测试
确保你的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。
编辑
给出你发布的代码,你有几个错误:
- 你把你的代码包装成
- 你注释掉了
jsonText
,但仍然将其分配给变量term
,导致未捕获的异常。
jQuery(document).ready()
块了吗?修复这两件事,你的POST
请求将正确完成。
另一方面,你到底为什么要使用jQuery 1.5版本?
- 选择onclick事件jquery
- 用于多个类事件Jquery的单个函数
- 激发滑块's幻灯片事件jquery ui
- 设置重复按钮以注册点击事件jquery
- 保留当前点击事件jquery
- 启动/停止按键事件jquery
- 在事件jquery中插入一个函数
- 删除克隆的事件JQuery
- typeahead选择事件(jQuery)的动态绑定
- 触发自定义事件 Jquery
- 绑定两次或更多次的事件 jquery
- 单击时的事件 jquery 不起作用
- 在鼠标悬停事件 jquery 上显示边框的内容
- 同时触发两个鼠标事件 jQuery
- 焦点事件 jquery 组合框/自动完成
- 如何在页面中捕获“正文”和“正文”事件[Jquery].
- 将对象传递给事件 jQuery
- 验证“取消”上的字段 单击Onbeforeunload事件JQUERY
- 复选框单击事件 jQuery 不起作用
- 口述事件jquery顺序