Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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
Javascript 如何处理JSON响应?_Javascript_Jquery_Jeditable - Fatal编程技术网

Javascript 如何处理JSON响应?

Javascript 如何处理JSON响应?,javascript,jquery,jeditable,Javascript,Jquery,Jeditable,现在,我正在处理的服务器响应返回一个JSON响应,如下所示: {"status":1} 保存后,该表将实际响应:{“status”:1}放在页面上。不管怎样,我想绕开这个问题?所以我提出的解决方案与madcapnmckay的类似 然后url函数是 function submitEditableTextArea(value, settings) { var edits = new Object();

现在,我正在处理的服务器响应返回一个JSON响应,如下所示:

{"status":1}

保存后,该表将实际响应:
{“status”:1}
放在页面上。不管怎样,我想绕开这个问题?

所以我提出的解决方案与madcapnmckay的类似

然后url函数是

function submitEditableTextArea(value, settings) { 
                        var edits = new Object();
                        var result = $.fn.addHTMLfromAJAX(value);
                        edits[settings.name] = [value];
                        var returned = $.ajax({
                            type            : "POST",
                            data            : edits,
                            dataType    : "json",
                            success     : function(_data) {
                                var json = eval( _data );
                                if ( json.status == 1 ) {
                                    console.log('success');
                                }
                            }
                        });
                        return(result);
                    }

更好的解决方案是在返回的json数据到达页面之前对其进行后处理

假设服务器返回以下json字符串:

{ "status": 1, "result": "value to be displayed", "other": "some other data" }
您需要处理“状态”和“其他”字段,并在表格输入字段中显示“结果”字段

将以下两行添加到jquery.jeditable.js:

(第95行附近):

(大约第350行,在“成功:功能(结果、状态){”之后)

然后,在您自己的代码中,执行以下操作:

$(some_field).editable(
 '/some_url_on_your_server',
 {
     indicator : "<img src='/images/spinner.gif'>",
     tooltip: "Click to edit.",
     indicator: "Saving...",
     onblur: "submit",
     intercept: function (jsondata) {
         obj = jQuery.parseJSON(jsondata);
         // do something with obj.status and obj.other
         return(obj.result);
     },
     etc.
$(某些字段)。可编辑(
“/您的服务器上的某个url”,
{
指标:“,
工具提示:“单击以编辑。”,
指标:“保存…”,
onblur:“提交”,
截取:函数(jsondata){
obj=jQuery.parseJSON(jsondata);
//用obj.status和obj.other做点什么
返回(目标结果);
},
等
这允许你做一些很酷的事情,比如让你的服务器把缩写转换成完整的字符串等等


享受吧!

这就是我处理json响应的方式

首先,使用
ajaxoptions
设置数据类型。然后,在回调函数中处理数据。其中,
this.revert
是原始值

oTable.$('td:eq(3)').editable('/admin/products/add_quantity_used', {
    "callback" : function(sValue, y) {
        var aPos = oTable.fnGetPosition(this);          
        if($("#dialog-message").length != 0){
            $("#dialog-message").remove();
        }
        if(!sValue.status){
        $("body").append('<div id="dialog-message" style="display:none;">'+sValue.value+'</div>');
        $( "#dialog-message" ).dialog({
            modal: true,
            buttons: {
                Ok: function() {
                    $( this ).dialog( "close" );
                }
            }
        }); 
        if(this.revert != '')
            oTable.fnUpdate(this.revert, aPos[0], aPos[1]);
        else 
            oTable.fnUpdate("click to edit", aPos[0], aPos[1]);
      }else
        if(sValue.status)
            oTable.fnUpdate(sValue.value, aPos[0], aPos[1]);


    },
    "submitdata" : function(value, settings) {
        return {
            "data[users_to_products][users_to_products_id]" : this.parentNode.getAttribute('id'),
            "column" : oTable.fnGetPosition(this)[2]                
        };
    },
    "height" : "30px",
    "width" : "30px",
    "maxlength" : "3",
    "name" : "data[users_to_products][quantity_used]",
    "ajaxoptions": {"dataType":"json"}
}).attr('align', 'center');
oTable.$('td:eq(3)')。可编辑('/admin/products/add_quantity_used'{
“回调”:函数(S值,y){
var aPos=可旋转的.fGetPosition(此);
if($(“#对话框消息”).length!=0){
$(“#对话框消息”).remove();
}
如果(!sValue.status){
$(“body”).append(“”+sValue.value+“”);
$(“#对话框消息”).dialog({
莫代尔:是的,
按钮:{
好的:函数(){
$(此).dialog(“关闭”);
}
}
}); 
如果(this.revert!='')
oTable.fUpdate(this.revert,aPos[0],aPos[1]);
其他的
oTable.fUpdate(“单击编辑”,aPos[0],aPos[1]);
}否则
if(值状态)
oTable.fUpdate(sValue.value,aPos[0],aPos[1]);
},
“提交数据”:功能(值、设置){
返回{
“数据[用户到产品][用户到产品\u id]”:this.parentNode.getAttribute('id'),
“列”:oTable.fGetPosition(本)[2]
};
},
“高度”:“30px”,
“宽度”:“30px”,
“最大长度”:“3”,
“名称”:“数据[用户到产品][使用数量]”,
“ajaxoptions”:{“数据类型”:“json”}
}).attr('align','center');

有一种使用回调的简单方法。
.editable()
将任何响应转换为字符串,因此必须将响应转换为JSON变量。然后可以使用“.text()”方法检索和写入值。检查代码:

$("#myField").editable("http://www.example.com/save.php", { 
    submit    : 'Save',
    cancel    : 'Cancel',
    onblur    : "ignore",
    name      : "sentText",
    callback : function(value, settings) {
        var json = $.parseJSON(value);
        $("#myField").text(json.sentText);
    }
});

让我震惊的是,默认情况下插件中不存在这个问题。谢谢你的帮助。同意:它应该在插件中,因为它对于很多用例来说非常方便。+1@relipse页面是Mika Tuupola状态。这个答案非常简洁,我已经把它放好了,不幸的是其中一个被困在了当前版本。有点像仅链接的答案现在很有用,但以后就不再那么有用了。我认为这不再是最好的答案。您不需要编辑源代码来解析json响应。(可能源代码自此答案以来发生了更改?)您可以像Felipe的回答一样使用回调。回调中的
指的是服务器响应,而不是提交的表单内容(正如作者的站点错误陈述的那样)!欢迎使用StackOverflow。请记住,在阅读帖子时,标点符号和适当的大小写非常有帮助。这是一个很好的解决方案,我不必编辑可编辑脚本thx。我想说的是,我不知道这会如何工作。在回调中,
value
指的是提交的值,而不是响应。但是我刚刚测试了它,value是返回值,而不是提交的值!在jeditable页面()上,它说“value包含提交的表单内容”。这是不正确的!(顺便说一句,save.php之后有一个额外的引号,这会弄乱您的代码标记。)这是一个非常好的解决方案,无需进行破解!您可以将该字段作为
$进行更新(此).text(json.sentText);
这将使它成为跨字段的更通用的绑定。在Felipe的回答中描述的回调中的“value”变量保存服务器响应。因此,您可以在回调中对其执行任何操作。我使用服务器的JSON响应为用户填充页面上显示的文本,并确定其他更改在页面上有一个新标签。
$(some_field).editable(
 '/some_url_on_your_server',
 {
     indicator : "<img src='/images/spinner.gif'>",
     tooltip: "Click to edit.",
     indicator: "Saving...",
     onblur: "submit",
     intercept: function (jsondata) {
         obj = jQuery.parseJSON(jsondata);
         // do something with obj.status and obj.other
         return(obj.result);
     },
     etc.
oTable.$('td:eq(3)').editable('/admin/products/add_quantity_used', {
    "callback" : function(sValue, y) {
        var aPos = oTable.fnGetPosition(this);          
        if($("#dialog-message").length != 0){
            $("#dialog-message").remove();
        }
        if(!sValue.status){
        $("body").append('<div id="dialog-message" style="display:none;">'+sValue.value+'</div>');
        $( "#dialog-message" ).dialog({
            modal: true,
            buttons: {
                Ok: function() {
                    $( this ).dialog( "close" );
                }
            }
        }); 
        if(this.revert != '')
            oTable.fnUpdate(this.revert, aPos[0], aPos[1]);
        else 
            oTable.fnUpdate("click to edit", aPos[0], aPos[1]);
      }else
        if(sValue.status)
            oTable.fnUpdate(sValue.value, aPos[0], aPos[1]);


    },
    "submitdata" : function(value, settings) {
        return {
            "data[users_to_products][users_to_products_id]" : this.parentNode.getAttribute('id'),
            "column" : oTable.fnGetPosition(this)[2]                
        };
    },
    "height" : "30px",
    "width" : "30px",
    "maxlength" : "3",
    "name" : "data[users_to_products][quantity_used]",
    "ajaxoptions": {"dataType":"json"}
}).attr('align', 'center');
$("#myField").editable("http://www.example.com/save.php", { 
    submit    : 'Save',
    cancel    : 'Cancel',
    onblur    : "ignore",
    name      : "sentText",
    callback : function(value, settings) {
        var json = $.parseJSON(value);
        $("#myField").text(json.sentText);
    }
});