Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您可以简单地用JSON AJAX响应替换JavaScript对象吗?_Javascript_Jquery_Ajax_Forms - Fatal编程技术网

您可以简单地用JSON AJAX响应替换JavaScript对象吗?

您可以简单地用JSON AJAX响应替换JavaScript对象吗?,javascript,jquery,ajax,forms,Javascript,Jquery,Ajax,Forms,我有一个简洁的jQuery插件,它允许您通过传入JavaScript对象来获取和设置表单字段值 传入对象的属性名与表单字段名匹配,其值将在HTML表单上设置 我这里有一个正在使用的演示: 我认为这个插件非常有用的主要方面可能是通过填写来自AJAX响应的表单 在下面的演示中,我传入了一个设置表单字段值的JavaScript对象 为了让它在现实生活中有用,我看到了它;它的主要用途是从AJAX响应填充表单 所以我的问题,虽然可能很基本,但我不确定 假设您单击一个按钮触发AJAX请求,返回值是JSON

我有一个简洁的jQuery插件,它允许您通过传入JavaScript对象来获取和设置表单字段值

传入对象的属性名与表单字段名匹配,其值将在HTML表单上设置

我这里有一个正在使用的演示:

我认为这个插件非常有用的主要方面可能是通过填写来自AJAX响应的表单

在下面的演示中,我传入了一个设置表单字段值的JavaScript对象

为了让它在现实生活中有用,我看到了它;它的主要用途是从AJAX响应填充表单

所以我的问题,虽然可能很基本,但我不确定

假设您单击一个按钮触发AJAX请求,返回值是JSON响应。我可以简单地将JSON响应传递到这个jQuery插件来填充表单值吗?还是需要先转换并以其他方式处理它?

表单字段名为“表单字段值”的JavaScript对象如下所示:

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