【问题标题】:assigning global var to a php array accessed by jQuery post()将全局变量分配给 jQuery post() 访问的 php 数组
【发布时间】:2012-01-04 00:22:57
【问题描述】:

我对 jQuery 很陌生(一周以来),不明白为什么我不能将 PHP (work.php) 数组分配给全局变量 imgArrayThumbs。我正在调用由 php opendir 函数创建的图像名称数组。当我alert(imgArrayThumbs); 时,我刚回来[object Object]。有人可以帮忙吗?整天都想弄清楚。

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

【问题讨论】:

    标签: jquery global-variables phpjs


    【解决方案1】:

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

    此外,jQuery 默认需要 JSON 结果,但您的 PHP 代码并未将其完全格式化为正确的 JSON。用 JSON 编码的一个更简单的解决方案是在末尾删除 for 循环,并改用 echo json_encode($arrayName);

    【讨论】:

    • 嘿,谢谢。工作得很好。我不得不理解这个 $.ajax 函数和简写的 $.post()。 data.resposeJSON; 奇怪地不起作用,但 data 起作用了。为console.log() 调试提示干杯:) 将上面的工作版本发布为编辑。干杯。
    • 对不起;忘了我有时会混淆 Prototype 和 jQuery AJAX 语法。 resonseJSON 是一个原型的东西。回答编辑以反映正确的 jQuery 语法。
    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2013-03-19
    相关资源
    最近更新 更多