我有一个问题,我的Js文件无法识别由ajax构建的php变量。 这是一个例子:
的index.php:
<script src="js.js">
</script>
<?
include('build.php');
<div id="brand">
<?
echo $brandinput;
?>
</div>
//....more code
?>
build.php:
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
crossOrigin: true,
dataType: "jsonp",
type: "GET",
url: "getBrand.php",
data: info,
success: function(data){
$("#result").html(data);
}
});
</script>
<?php $brandinput='<div id="result"></div>';
?>
js.js:
$(document).ready(function(){
//dosomething with div's in index.php
}
因此,我会尝试以最简单的方式解释这一点。我的index.php包含一个build.php,您可以看到调用ajax从另一个服务器检索数据。此数据位于php变量($brandinput
)中,该变量将包含许多<div>,<input>,... etc.
然后index.php echo $ brandinput,显示变量的所有内容。但是我有一个js.js改变了div,输入等等的外观。这个js没有识别变量$ brandinput的内容。
我想知道你是否有更多想法或我做错了什么......
所有代码都运行良好,我测试了很多次(除了我之前说的)
ajax调用工作正常,Index.php正确显示$braninput
。
P.S。 $brandinput
是这样的:
<div id='BlackBerry'><img src='..\/images\/supporteddevices\/blackberry-logo.jpg' alt='blackberry-logo' width='75'><br><input class='adjustRadio' type='radio'
是的,它的效果也很好。
答案 0 :(得分:0)
你可以尝试将你的<script>
标签移到你的php代码之后:
<? include('build.php'); ?>
<div id="brand">
<? echo $brandinput; ?>
</div>
<script src="js.js"></script>
//....more code
稍微不同的是,您应该考虑避免使用HTML和Javascript嵌入/混合PHP代码。看一下这个post以获得更好的方法,将数据从PHP传递到Javascript&#34;。
答案 1 :(得分:0)
实际上这是它应该如何工作,你需要做的是在执行js.js
试试这种方式
// in build.php
$(document).ready(function () {
var promise = $.ajax({
crossOrigin: true,
dataType: "jsonp",
type: "GET",
url: "getBrand.php",
data: info,
success: function (data) {
$("#result").html(data);
//dosomething with div's in index.php
}
});
});
或(假设在 build.php中的脚本之后加载了js.js,或者必须在之后加载js.js)
// in build.php
$(document).ready(function () {
var promise = $.ajax({
crossOrigin: true,
dataType: "jsonp",
type: "GET",
url: "getBrand.php",
data: info,
success: function (data) {
$("#result").html(data);
}
});
});
// in js.js
$(document).ready(function () {
promise.then(function (data) {
//dosomething with div's in index.php
});
});
P.S
$brandinput
只需保存分配给的字符串,并且永远不会使用ajax请求进行更改,其中ajax成功处理程序只是直接在客户端操作呈现的DOM。