2017-06-19 104 views
3

我有一个动态div,它将根据json数据进行更改。我试图在“for循环”中使用jquery控制这个div的内容,但它不工作?
有人可以给我线索和如何纠正代码的一些想法?jquery不能使用ajax?

$.ajax({ 
    type: "POST", 
    url: 'http://192.168.12.230/XXXX/XXX', 
    dataType: 'json', 
    contentType: "application/json", 
    success: function (data) { 
     console.log(data); 

     var projectList = "<ul style='list-style:none;'>" 

     for (var i = 0; i < data.d.length; i++) { 
      projectList += "<li>" + 
       "<div class='location'>" + 
       "<p>Sounth Africa</p>" + 
       "</div>" + 
        "<div class='status'>" + 
         "<div class='status_circle'></div>" + 
         "<p>in raising</p>" + 
        "</div>" + 
      "</li>" 

      $(".category p").append(data.data[i].categoryName); 

      if (data.data[i].raisingStatus == 1) { 
       $(".status p").html("in raising"); 
       $(".status_circle").css("background-color", "#32C832"); 
      } else if (data.data[i].raisingStatus == 0) { 
       $(".status p").html("stop raising"); 
       $(".status_circle").css("background-color", "#CD3C14"); 
      } 
     } 
     projectList += "</ul>"; 
     $('#projectList').append(projectList); 


    }, 
    error: function() { 
     alert("error"); 
    } 
}); 

顺便说一句,而不是在javascript中导入HTML代码,有没有想法实现这个功能,而不使用HTML代码?

非常感谢:)

+0

你有任何错误? –

+0

没有错误,只是内容没有更新@GustafGunér –

+0

你能让我知道你从响应中得到了什么样的json格式吗? –

回答

2
if (data.data[i].raisingStatus == 1) { 
    $(".status p").html("in raising"); 
    $(".status_circle").css("background-color", "#32C832"); 
} else if (data.data[i].raisingStatus == 0) { 
    $(".status p").html("stop raising"); 
    $(".status_circle").css("background-color", "#CD3C14"); 
} 

更换for循环,你可以不填充添加到DOM的DOM $(".status p")直到建议。 $('#projectList').html(projectList);

你可以用这样的html代码添加css和文本。

if (data.data[i].raisingStatus == 1) { 
    projectList += "<div class='status'>in raising</p>"; 
    var style = "background-color:#32C832"; 
    projectList += "<div class='status_circle' style='"+style+"'></div>"; 

} else if (data.data[i].raisingStatus == 0) { 
    projectList += "<div class='status'>stop raising</p>"; 
    var style = "background-color:#CD3C14"; 
    projectList += "<div class='status_circle' style='"+style+"'></div>"; 
} 

对于你的第二个问题,是的这一切都与html js和css混乱。您可以创建HTML的变量,并参数更换,以更清晰的代码

for (var i = 0; i < data.data.length; i++) { 

var status = ""; 
var style = ""; 
if (data.data[i].raisingStatus == 1) { 
status = "in raising"; 
style = "background-color:#32C832"; 
} else if (data.data[i].raisingStatus == 0) { 
status = "stop raising"; 
style = "background-color:#CD3C14"; 
} 
var projectList="<li><div class='location'><p>Sounth Africa</p></div><div class='status'> 
    <div class='status_circle' style='{0}'></div><p>{1}</p></div></li>".format(style, status); 
} 

String.prototype.format = function() { 
    var formatted = this; 
    for (var i = 0; i < arguments.length; i++) { 
     var regexp = new RegExp('\\{'+i+'\\}', 'gi'); 
     formatted = formatted.replace(regexp, arguments[i]); 
    } 
    return formatted; 
}; 
1

而不是循环,你可以使用每个循环作为例子给出如下。

$.each(json, function(key, value){ 
    console.log(value); 
}); 
+0

但从我的代码,为什么jquey部分不工作? –

2

您正试图在for循环中创建“.status p”之前访问它。您在for循环完成后添加HTML。因此在for循环中,它没有找到该类,因为它尚未创建。

+0

是的!这是真的,但我该如何解决这个问题? –

1

不确定哪些不起作用。如果您可以添加更多细节,将有助于理解问题。否则,你的代码看起来不错..你可以按照早前公布与$。每个

1
if (data.data[i].raisingStatus == 1) { 
       $(".status p").html("in raising"); 
       $(".status_circle").css("background-color", "#32C832"); 
      } else if (data.data[i].raisingStatus == 0) { 
       $(".status p").html("stop raising"); 
       $(".status_circle").css("background-color", "#CD3C14"); 
    } 

*这些条件语句必须给另一个用于循环..

$(“状态P”)此行在创建之前会为空循环提供空的空间。

"<div class='status'>" + 
      "<div class='status_circle'></div>" + 
      "<p>in raising</p>" + 
"</div>" 

的DIV状态创建,同时创造有循环你不尝试在同一回路接入..尝试$(“状态P”),在新的循环访问..它将作品..