2016-12-20 92 views
0

我在Zend框架1工作,我有一个控制器,这样的功能:只要我打电话$adapter->isValid()Zend文件传输适配器Http打破了我的AJAX响应,为什么?

$('#fileupload').show().fileupload({ 
    url: url, 
    type: "POST", 
    cache: false, 
    dataType: 'json', 
    done: function (e, data) { 
     console.log(data.result); 
    }, 
    error: function (xhr, textStatus, errorThrown) { 
     console.log(xhr + " " + textStatus + " " + errorThrown); 
    } 
}) 

出于某种原因:

public function uploadAction() 
{ 
    $this->_helper->layout->disableLayout(); 
    $this->_helper->viewRenderer->setNoRender(); 
    $data = []; 

    if ($this->getRequest()->isPost()) { 
     $path = /cronjobs/uploads'; 

     // Clean $path directory OOP way using SPL 
     $di = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS); 
     $ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); 
     foreach ($ri as $file) { 
      $file->isDir() ? rmdir($file) : unlink($file); 
     } 

     $adapter = new Zend_File_Transfer_Adapter_Http(); 
     $adapter->addValidator('Extension', false, ['extension' => 'csv', 'case' => true]); 
     $adapter->addValidator('MimeType', false, ['extension' => 'text/plain']); 

     // Check if the uploaded file is valid 
     $errors[] = $adapter->isValid() === false ? $adapter->getMessages() : ''; 

     $file  = (array) $adapter->getFileInfo()['file']; 
     $ext  = end(explode('.', $file['name'])); 
     $new_path = $file['tmp_name']; 

     // Check file size 
     $checkFileSize = Attachment::checkMaxfileSize($file['size']); 
     if (!$checkFileSize['accept']) { 
      echo json_encode($checkFileSize['message']); 

      return true; 
     } 

     $data['file'] = array(
      'name'  => $file['name'], 
      'size'  => $adapter->getFileSize(), 
      'file_path' => $new_path, 
      'file_ext' => $ext 
     ); 

     $data['var'] = ''; 
    } else { 
     $data['error'] = 'Invalid request.'; 
    } 

    return $this->_helper->json($data); 
} 

这种方法被称为槽AJAX如下在控制器中,AJAX响应会中断。我可以说问题在那里,因为如果我评论一段代码,一切正常。

这是我目前得到的消息:

POST http://localhost/admin/upload net::ERR_EMPTY_RESPONSE 
massive_charge_types_file_upload.js:147 [object Object] error 

阅读所有的下列主题后:

我出于主意,因为无法找到导致行为的原因而被卡住了。

UPDATE:

我相信这个问题是关于isValid()方法,该方法返回一个布尔值,但由于某种原因,这是打破我的响应。有任何想法吗?

可以帮助我吗?

+0

您是否打开了错误报告以显示您的php.ini中的声明和警告?我觉得这可能会提供一些线索 –

+0

我会在E_NOTICE中添加 - 以防万一,这提供了一些线索。空的回应可能是因为脚本抛出了某种错误。您是否将错误记录到日志文件 - 可能包含您的AJAX调用引发的一些错误。 –

+0

@PaulColdrey我已更改为'E_ALL&〜E_DEPRECATED&〜E_NOTICE&〜E_STRICT',但这根本没有帮助,我没有在日志中发现任何异常,并且请求仍然失败 – ReynierPM

回答

0

看来你的MimeType验证程序的语法是错误的:

$adapter->addValidator('MimeType', false, ['extension' => 'text/plain']); 

也许应该是:

$upload->addValidator('MimeType', false, array('text/plain')); 

如上所述:

https://framework.zend.com/manual/1.12/en/zend.file.transfer.validators.html

由于您的文件获得了”通过(不可能)验证测试 - 我猜这是是什么导致没有结果?

+0

这就是不是问题,我已经修复了这条线,但问题仍然存在 – ReynierPM

0

了几次后,我把它加入工作如下:

if ($adapter->isValid() === false) { 
    $data['error'][] = $adapter->getMessages(); 
    echo json_encode($data); 

    return true; 
} 

我需要使用原始json_encode() PHP函数,如果我使用Zend框架JSON助手,例如:$this->_helper->json($data)响应没”工作。

我相信这是Jquery插件的一个限制,不确定是否很难。

相关问题