【问题标题】:uploadify + jQuery 1.4 response is empty after uploadCompleteuploadify + jQuery 1.4 响应在 uploadComplete 后为空
【发布时间】:2010-01-16 22:08:34
【问题描述】:

我正在使用带有 jquery 1.4 的 uploadify 来上传图片。在上传文件的 php 脚本中,我们打印:

$json_response['status'] = "true";
$json_response['file'] = $_FILES;
echo Zend_Json_Encoder::encode($json_response);

在 javascript 中我们这样做(简而言之):

$('#images_upload_file').uploadify({

    onComplete: function(event, queueID, fileObj, response, data) {

            console.log("upload complete");
            console.log(response);

无论如何,“响应”总是空的。事件、queueID、fileObj 和数据都正确填写。有谁知道如何解决这个问题?

如果您需要更多信息,请告诉我。 PS:我们的代码上传图片就好了,只是升级到jquery 1.4后响应一直是空的

【问题讨论】:

  • 有什么特殊原因让你使用Zend_Json_Encoder::encode 而不是内置json_encode 函数吗?我在使用 json_encode 和 uploadify 时没有遇到任何问题。另外,请尝试将response.statusresponse.file 打印到console.log
  • 我还在使用 1.3.2。为了处理 json,我总是使用来自 json.org 的 json2.js。我将在下面发布我的代码。
  • response.status 和 response.file 为空...

标签: jquery uploadify


【解决方案1】:

我总是使用json2.js 来处理任何 json 数据。这个库有安全机制,以防数据不是正确的 json 格式。你可以从http://json.org获取,一定要下载js文件,不要直接从他们的网站上使用。

我的代码总是这样:

onComplete : function (event, queueID, fileObj, response, data) {
  //process response
  try {
    var r = JSON.parse(response);
    //process the JSON data, ex
    console.log(r.status); 
  }
  catch(e) {
    //not json or bad format, do something about it
    alert("cannot parse data as json!");
  }
}

我使用json2.js 的原因是因为我的php 脚本有会话检查,如果会话不被接受就会重定向。它在进入页面之前完成,使用过滤器模块,所以我无法检查它是 AJAX 请求还是正常的页面访问。如果需要的会话不满足页面的规则,它会立即重定向,所以它会返回一个完整的网页。

这将使响应不是有效的 json 格式。使用json2.js 我可以在catch 块中处理它,然后执行另一个操作,例如重新加载当前页面。这只是我一直使用的东西,并且一直为我工作。

仅供参考,json2.js 不需要,也与 jQuery 完全无关。

【讨论】:

  • 感谢这个答案很棒。它修复了 json 解析问题,尽管这一定是一个 uploadify 问题,因为我们从来不需要在 jQuery 中使用 json 类。有一个但是:Safari 在上传文件后会自动崩溃/关闭...这对您在 safari 上是否有效?
  • 另一句话:Internet Explorer 7 在解析 JSON 时会显示您的警报,它适用于 FF 和 Safari 和 Chrome,但不适用于 IE...您对此有什么想法吗?
  • 好吧,我使用的是 linux,所以我只在 Firefox 和 Google Chrome 中检查我的代码。我从来没有遇到过这两个问题。 IE总是用PITA来处理。你用的是最新的uploadify吗?也许这是uploadify或safari中的错误。对于 IE,如果由我决定,我宁愿显示一个启动图像来告诉用户使用“现代浏览器”:)。也许你可以使用 Firebug lite 来追踪 IE 中的问题。
  • IE中的这个alert,里面的文字是什么?如果您直接使用json.org 中的json2.js,站点中的脚本会显示警报以防止其他人这样做。如果你已经下载了,在编辑器中打开,看看是否还有警告代码。
【解决方案2】:

是否在 PHP 脚本中打开了 error_reporting?

会不会是因为 error_reporting 设置而导致无法输出的致命错误(例如,因为它无法加载 Zend_Json_Encoder 类)?

【讨论】:

  • 嗨 Pekka,这不是致命错误。我们在所有应用程序中都使用了 json_encoder,而且效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2011-03-05
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2012-12-22
  • 2015-12-24
相关资源
最近更新 更多