2011-11-22 89 views
0

对于jQuery来说我很新(从一周开始),不明白为什么我不能将PHP(work.php)数组赋值给全局变量imgArrayThumbs。我打电话给一组由php opendir函数创建的图像名称。当我alert(imgArrayThumbs);我刚刚回来[object Object]。有人可以帮忙吗?一直试图弄清楚它整天。将全局变量赋值给一个由jQuery访问的php数组()

scripts.js中

var imgArrayThumbs = ''; 

$.post("work.php", { task: "imgArrayThumbs" }, function(data) { 
    imgArrayThumbs = data; 
}); 

alert(imgArrayThumbs); 

work.php

include_once 'scripts/functions.php'; 

if($_POST['task'] == 'imgArrayThumbs'){ 
    imageArray('source/examples/thumbs', 'imgArrayThumbs'); 
} 
elseif ($_POST['task'] == 'imgArray'){ 
    imageArray('source/examples/', 'imgArray'); 
} 

的functions.php

function imageArray($dir, $arrayVar){ 
    $arrayName = array(); 

    $iNumber = 0; 
    $open = opendir ($dir); 
    while ($file = readdir($open)){ 
    if($file == "." || $file == ".." || $file == ".DS_Store"){ 

    }else{ 
     $arrayName[$iNumber] = $file; 
     $iNumber ++; 
    } 
    } 
    closedir ($open); 

    for ($i = 0;$i<count($arrayName);$i++){ 
    if ($i == 0) { 
     echo "\"" . $arrayName[$i] . "\""; 
    }else{ 
     echo ",\"" . $arrayName[$i] . "\""; 
    } 
    } 
} 

编辑01

工作版本:

scripts.js中:

var imgArrayThumbs = new Array(); 
$.ajaxSetup({async:false}); 
$.ajax({ 
    type: 'POST', 
    url: 'work.php', 
    data: { task: "imgArrayThumbs" }, 
    success: function(data) { 
    imgArrayThumbs = data; 
    }, 
    dataType: 'json' 
}); 

的functions.php:

echo json_encode($arrayName); // without loop 

回答

0

alert()做了toString()。由于jQuery代码返回一个对象,alert仅打印类类型,[object Object]。相反,使用类似Firebug的东西,或IE和Chrome的内置开发工具,然后执行imgArrayThumbs = data; console.log(imgArrayThumbs),然后检查控制台是否要浏览对象的内容。

此外,jQuery默认预设JSON结果,但是您的PHP代码并未正确格式化为正确的JSON。以JSON编码它的更简单的解决方案是在最后删除for循环,并使用echo json_encode($arrayName);代替。

+0

嘿,谢谢你。很好地工作。我必须让我的脑袋围绕这个$ .ajax函数和简短的$ .post()。 'data.resposeJSON;'奇怪的没有工作,但'数据'。欢呼'console.log()'调试提示:)发布上面的工作版本作为编辑。干杯。 –

+0

对不起,忘了我有时混合了Prototype和jQuery AJAX语法。 resonseJSON是一个原型的东西。回答编辑以反映正确的jQuery语法。 –