我有以下代码:
<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.
答案 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>
谢谢你的帮助。