jquery ajax成功找不到变量div

时间:2014-11-27 13:51:25

标签: jquery html ajax

我有以下代码:

<script>
function initialData() {
    var patches = [<?php echo $jsPatchArray ?>];

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

        var divIdPatch = "\"#initialData-" +patches[i]+ "\"";   

        $.ajax({
            type: "GET",
            url: "initial_data.php",
            data: {patch:patches[i]},
            success: function( data ) {
                $( divIdPatch ).html( data );
            }
        });


    };


    var divIdCount = "#srCount";

    $.ajax({
        type: "GET",
        url: "sr_count.php",
        success: function( data ) {
            $( divIdCount ).html( data ); 
        }
    });

}
</script>

<?php
$_SESSION['patchObjs'] = array();

foreach ($arrayRelQA as $patch)
{
    echo "\n";
    echo '<div id="initialData-'.$patch.'"></div>';
}
echo "\n<div id=\"srCount\"></div>";

从上面这部分工作正常:

var divIdCount = "#srCount";

$.ajax({
    type: "GET",
    url: "sr_count.php",
    success: function( data ) {
        $( divIdCount ).html( data ); 
    }
});

然而,循环部分没有 - ajax和底层initial_data.php正在执行,但成功找不到我的div(divIdPatch)。必须与我如何构造var divIdPatch有关。我尝试了以下(以及其他各种变体:

var divIdPatch = "\"#initialData-" +patches[i]+ "\"";   
var divIdPatch = "#initialData-" +patches[i];;

后续调查/编辑

看起来ajax正在搞乱for循环:

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

    var patch = patches[i];
    var divIdPatch = "#initialData-" +patches[i]; 

    alert("Outside: "+patch );
    alert( "Outside: "+divIdPatch );        

    $.ajax({

        type: "GET",
        url: "initial_data.php",
        data: {patch:patch},
        success: function( data ) {

            alert( "Inside Div: "+divIdPatch);
            alert( "Inside Data: "+data);
            $( divIdPatch ).html( data );
        }
    });


};

警报按此顺序触发(数组中的3个pcthes) 请注意“Inside Div”警报中的补丁顺序:

Outside: patch 1
Outside: #initialData-patch 1
Inside Div: #initialData-patch 2
Inside Data: Patch 1 complete.

Outside: patch 2
Outside: #initialData-patch 2
Inside Div: #initialData-patch 3
Inside Data: Patch 2 complete.

Outside: patch 3
Outside: #initialData-patch 3
Inside Div: #initialData-patch 3
Inside Data: Patch 3 complete.

4 个答案:

答案 0 :(得分:1)

这一行:

  var divIdPatch = "\"#initialData-" +patches[i]+ "\""; 

应该是:

var divIdPatch = "#initialData-" +patches[i]; 

答案 1 :(得分:0)

我不知道js是否可以运行php脚本。 但你可以在服务器上编写另一个服务,在响应时提供$ jsPatchArray然后通过另一个ajax在客户端上检索它然后执行循环调用&#34; initial_data.php&#34;成功检索$ jsPatchArray。

$.ajax({
            type: "GET",
            url: "service_to_retrieve_jsPatchArray.php",

            success: function( jsPatchArray ) {
               // do your loop here. 
            }
        });

或者另一种方式,你可以将$ jsPatchArray放在html上,然后js从访问html元素中获取它。

答案 2 :(得分:0)

Ajax定义允许代码在调用脚本的上下文之外执行。您的JavaScript正在进行Ajax调用并在div实际位于Dom之前返回数据。将您的函数包装在$(document).ready函数中,您应该很高兴。

答案 3 :(得分:0)

问题是,如果id包含空格,则jquery ajax成功函数无法在html中找到div。 (在使用console.log之后我确认ajax中的流程实际上是正确的 - noobie to js!)。

原始的PHP代码生成了像:

这样的div
<div id="initialData patch 0"></div>

下面的JS divId var正确形成,例如:

var divId = "#initialData patch 0"

但是下面的代码没有找到div:

$.ajax({
    type: "GET",
    url: script,
    data: {patch:data},
    success: function( response ) {     
        $( divId ).html( response );
    }
}); 

更新.php&amp; JS构建和搜索没有解决问题的空格的div,例如:

<div id="initialData-patch-0"></div>

谢谢你的帮助。