如何从Json创建动态javascript对象?
我不知道如何创建dynamics javascript对象: 我已经尝试过这个代码,但它不工作 有什么想法吗 有人告诉我“在Ajax范围之外创建元素” 我想访问一个javascript对象,该对象应该被排序到一个名为element的数组中 例如,元素[1]是一个对象,元素[2]是另一个对象 整个对象数组是使用jquery从json ajax调用构建的 它非常适合阅读。。。但在程序的另一部分中修改对象是不可能的 这不是异步问题,似乎是像[]一样的对象名问题 非常感谢你宝贵的回答!我将尝试修改代码。。。创建对象是如此令人兴奋!我的目标是用户能够同时修改几个不同的表单,每个表单都是一个对象,但我不想使用Php hi hi。。。我使用打印功能生成表单 这是我的代码:如何从Json创建动态javascript对象?,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我不知道如何创建dynamics javascript对象: 我已经尝试过这个代码,但它不工作 有什么想法吗 有人告诉我“在Ajax范围之外创建元素” 我想访问一个javascript对象,该对象应该被排序到一个名为element的数组中 例如,元素[1]是一个对象,元素[2]是另一个对象 整个对象数组是使用jquery从json ajax调用构建的 它非常适合阅读。。。但在程序的另一部分中修改对象是不可能的 这不是异步问题,似乎是像[]一样的对象名问题 非常感谢你宝贵的回答!我将尝试修改代码。
/* PHASE 1*/
$.ajax({
type: "POST",
url: "lectureBdd.php",
dataType: "json",
success: function (data) {
//CREATE JAVASCRIPTS OBJECTS
var element = 0;
var element = [];
for (var i = 0; i < data.length; i++) {
element[i] = new Element([i], data[i].nom, data[i].
type, data[i].photo, data[i].taille, data[i].prix);
// OBJECTS TO SCREEN WORKS WELL INTO THE FUNCTION BUT NOT OUTSIDE
element[i].print();
alert(element[i].prix);
}
}
});
element[2].print(); /* Impossible to modify my object*/
/* CONSTRUCTOR CLASSE "ELEMENT" */
function Element(id,txtNom,txtType,txtPhoto,txtTaille,txtPrix){
this.id=id;
this.nom=txtNom;
this.type=txtType;
this.photo=txtPhoto;
this.taille=txtTaille;
this.prix=txtPrix;
this.print=affForm;
this.modif=modifForm;
}
/*第一阶段*/
$.ajax({
类型:“POST”,
url:“讲师bdd.php”,
数据类型:“json”,
成功:功能(数据){
//创建JAVASCRIPTS对象
var元素=0;
var元素=[];
对于(变量i=0;i
/*代码的其余部分用于获取它自动创建的带有对象变量的表单的信息*/
function affForm(){
var nom= this.nom;
var id=this.id;
var divid = 'div'+id;
var savebutton= 'savebutton'+id;
/* DYNAMIC FORM CREATION: */
/* http://stackoverflow.com/questions/17431760/create-a-form-dynamically-with-jquery- and-submit */
$("#share").append('<form action="sharer.php" method="POST">');
$("#share").append('<div id='+divid+' style="height:100px;background-color:white" > <img src="images/'+this.photo+'" height=100px width=150px />');
$("#share").append('<input type="text" placeholder="'+nom+'" name="routename" id="rname"/>');
$("#share").append('<input type="text" placeholder="'+this.taille+'" name="routename" id="rname"/>');
$("#share").append('<input type="text" placeholder="'+this.prix+' Euros" id="prix" name="prix" class="address"/>');
$("#share").append('<input type="text" placeholder="'+id+'" id="rdescription" name="routedescription" class="address"/>');
$("#share").append('<input type="text" placeholder="tags" id="tags" name="routetags"/>');
$("#share").append('<br><input type="submit" id="'+savebutton+'" value="Save" />');
$("#share").append('</div>');
$("#share").append(divid);
$( "#"+savebutton+"").click(function() {
modifForm(id);
alert( "Handler for .click() called. savebutton"+id+"" );
});
函数affForm(){
var nom=this.nom;
var id=this.id;
var divid='div'+id;
var savebutton='savebutton'+id;
/*动态表单创建:*/
/* http://stackoverflow.com/questions/17431760/create-a-form-dynamically-with-jquery- 并提交*/
$(“#股份”)。附加(“”);
$(“#股份”)。附加(“”);
$(“#股份”)。附加(“”);
$(“#股份”)。附加(“”);
$(“#股份”)。附加(“”);
$(“#股份”)。附加(“”);
$(“#股份”)。附加(“”);
$(“#共享”)。追加(“
”);
$(“#股份”)。附加(“”);
$(“#份额”)。追加(divid);
$(“#”+保存按钮+”)。单击(函数(){
modifForm(id);
警报(“名为.savebutton“+id+”)的.click()处理程序);
});
您正在Ajax函数的成功回调中创建一个元素数组。该数组不向外部作用域公开,因此以后无法索引该数组(未定义)。请在调用该数组的作用域中声明该数组
此外,Ajax是异步的:在成功函数运行之前,您的数组不会有任何元素,这可能需要花费任何时间。您也需要异步操作。请看一下jQuery的承诺实现,这将为您指明正确的方向
var element = [];
$.ajax({
type: "POST",
url: "lectureBdd.php",
dataType: "json",
success: function (data) {
for (var i=0; i < data.length; i++){
element[i] = new Element([i],data[i].nom,data[i].type,data[i].photo,data[i].taille,data[i].prix);
// OBJECTS TO SCREEN WORKS WELL INTO THE FUNCTION BUT NOT OUTSIDE
element[i].print();
alert(element[i].prix);
}}})
.done(function(){
element[2].print(); // Ajax is async; you'll need to operate async, too. Using a promise here.
});
var元素=[];
$.ajax({
类型:“POST”,
url:“讲师bdd.php”,
数据类型:“json”,
成功:功能(数据){
对于(变量i=0;i
有几个问题。var元素
处于一个闭包中,在第二次打印时无法访问。print
。而且AJAX是异步的,所以即使修复第一个作用域问题,元素在第二次打印时也不存在。它们所说的“在AJAX作用域之外”是指生成一个全局变量并将其存储在那里。这样,其他方法/命名空间s可以访问它。将element=[];
放在ajax函数之外,并删除所有var element=..
(请参阅下面的答案)