您可以简单地用JSON AJAX响应替换JavaScript对象吗?
我有一个简洁的jQuery插件,它允许您通过传入JavaScript对象来获取和设置表单字段值 传入对象的属性名与表单字段名匹配,其值将在HTML表单上设置 我这里有一个正在使用的演示: 我认为这个插件非常有用的主要方面可能是通过填写来自AJAX响应的表单 在下面的演示中,我传入了一个设置表单字段值的JavaScript对象 为了让它在现实生活中有用,我看到了它;它的主要用途是从AJAX响应填充表单 所以我的问题,虽然可能很基本,但我不确定 假设您单击一个按钮触发AJAX请求,返回值是JSON响应。我可以简单地将JSON响应传递到这个jQuery插件来填充表单值吗?还是需要先转换并以其他方式处理它? 表单字段名为“表单字段值”的JavaScript对象如下所示:您可以简单地用JSON AJAX响应替换JavaScript对象吗?,javascript,jquery,ajax,forms,Javascript,Jquery,Ajax,Forms,我有一个简洁的jQuery插件,它允许您通过传入JavaScript对象来获取和设置表单字段值 传入对象的属性名与表单字段名匹配,其值将在HTML表单上设置 我这里有一个正在使用的演示: 我认为这个插件非常有用的主要方面可能是通过填写来自AJAX响应的表单 在下面的演示中,我传入了一个设置表单字段值的JavaScript对象 为了让它在现实生活中有用,我看到了它;它的主要用途是从AJAX响应填充表单 所以我的问题,虽然可能很基本,但我不确定 假设您单击一个按钮触发AJAX请求,返回值是JSON
var formFieldValues = {
text:'text',
text2:'text2',
text3:'text3',
radio:1
}
我的演示中的代码:
/*
* jQuery.formFieldValues: get or set all of the name/value pairs from child input controls
* @argument data {array} If included, will populate all child controls.
* @returns element if data was provided, or array of values if not
*/
$.fn.formFieldValues = function(data) {
var els = this.find(':input').get();
if(arguments.length === 0) {
// return all data
data = {};
$.each(els, function() {
if (this.name && !this.disabled && (this.checked
|| /select|textarea/i.test(this.nodeName)
|| /text|hidden|password/i.test(this.type))) {
if(data[this.name] == undefined){
data[this.name] = [];
}
data[this.name].push($(this).val());
}
});
return data;
} else {
$.each(els, function() {
if (this.name && data[this.name]) {
var names = data[this.name];
var $this = $(this);
if(Object.prototype.toString.call(names) !== '[object Array]'){
names = [names]; //backwards compat to old version of this code
}
if(this.type == 'checkbox' || this.type == 'radio') {
var val = $this.val();
var found = false;
for(var i = 0; i < names.length; i++){
if(names[i] == val){
found = true;
break;
}
}
$this.attr("checked", found);
} else {
$this.val(names[0]);
}
}
});
return this;
}
};
$(document).ready(function($) {
// Object with Form field values. (Form Field Name: 'value')
var formFieldValues = {
text:'text',
text2:'text2',
text3:'text3',
radio:1
}
// Set Form Field Values
$('#my-form').formFieldValues(formFieldValues);
// Get Form Field Values
console.log($('#my-form').formFieldValues());
});
/*
*jQuery.formFieldValues:从子输入控件获取或设置所有名称/值对
*@argument data{array}如果包含,将填充所有子控件。
*@如果提供了数据,则返回元素;如果未提供数据,则返回值数组
*/
$.fn.formFieldValues=函数(数据){
var els=this.find(':input').get();
if(arguments.length==0){
//返回所有数据
数据={};
$.each(els,函数(){
如果(this.name&!this.disabled&&(this.checked
||/select | textarea/i.test(this.nodeName)
||/text | hidden | password/i.test(this.type))){
if(数据[this.name]==未定义){
数据[this.name]=[];
}
数据[this.name].push($(this.val());
}
});
返回数据;
}否则{
$.each(els,函数(){
if(this.name&&data[this.name]){
var name=data[this.name];
var$this=$(this);
if(Object.prototype.toString.call(names)!='[Object Array]'){
names=[names];//向后兼容此代码的旧版本
}
if(this.type=='checkbox'| | this.type=='radio'){
var val=$this.val();
var=false;
对于(var i=0;i
我可以简单地将JSON响应传递到这个jQuery插件中以填充表单值吗?还是需要先以其他方式进行转换和处理
Ajax请求的响应默认为字符串(包含JSON)。您必须或配置jQuery来为您执行此操作(例如,通过数据类型:“json”
)
然而,作为插件的作者,这不应该是你所关心的。请明确说明您的API需要一个对象,由使用者来确保对象被传递。我相信您需要
var jsonObj = JSON.parse(els);
然后在代码中使用objJSON