如何从Json创建动态javascript对象?

如何从Json创建动态javascript对象?,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我不知道如何创建dynamics javascript对象: 我已经尝试过这个代码,但它不工作 有什么想法吗 有人告诉我“在Ajax范围之外创建元素” 我想访问一个javascript对象,该对象应该被排序到一个名为element的数组中 例如,元素[1]是一个对象,元素[2]是另一个对象 整个对象数组是使用jquery从json ajax调用构建的 它非常适合阅读。。。但在程序的另一部分中修改对象是不可能的 这不是异步问题,似乎是像[]一样的对象名问题 非常感谢你宝贵的回答!我将尝试修改代码。

我不知道如何创建dynamics javascript对象:

我已经尝试过这个代码,但它不工作

有什么想法吗

有人告诉我“在Ajax范围之外创建元素”

我想访问一个javascript对象,该对象应该被排序到一个名为element的数组中

例如,元素[1]是一个对象,元素[2]是另一个对象

整个对象数组是使用jquery从json ajax调用构建的

它非常适合阅读。。。但在程序的另一部分中修改对象是不可能的

这不是异步问题,似乎是像[]一样的对象名问题

非常感谢你宝贵的回答!我将尝试修改代码。。。创建对象是如此令人兴奋!我的目标是用户能够同时修改几个不同的表单,每个表单都是一个对象,但我不想使用Php hi hi。。。我使用打印功能生成表单

这是我的代码:

/* 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=..
(请参阅下面的答案)