Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery.submit()上传表单显示响应由Slim PHP返回_Php_Jquery_Submit_Slim - Fatal编程技术网

jQuery.submit()上传表单显示响应由Slim PHP返回

jQuery.submit()上传表单显示响应由Slim PHP返回,php,jquery,submit,slim,Php,Jquery,Submit,Slim,我有一个html表单用于将文件上载到服务器。为了简单起见,我只展示了基本的细节 <form id='uploadform' method='post' enctype='multipart/form-data' action='index.php/upload'> <input name='myFile' id='myFile' type='file'/> </form> <input type='button' id='upload' va

我有一个html表单用于将文件上载到服务器。为了简单起见,我只展示了基本的细节

 <form id='uploadform' method='post' enctype='multipart/form-data' action='index.php/upload'>
   <input name='myFile' id='myFile' type='file'/>
 </form>
 <input type='button' id='upload' value='Upload'/>
 <div id='response'></div>
业务逻辑是: $app->post('/upload',uploadFile');

   function uploadFile(){
       try{
           // if success uploading
           $app->redirect('/main-page');

       }catch(Exception $e){
           // if error 
           echo $e->getMessage();

       }
    }
问题:如果由于某种原因上传失败,将引发异常,用户将进入PHP错误页面。如果上传毫无例外地完成,应用程序将重定向到主页

需要的是:如果上传成功,应用程序应该像现在一样重定向到主页面……但是如果抛出任何异常,而不是转到PHP错误页面,应用程序应该留在上传页面上,id为“response”的应用程序应该显示异常

使用jQuery submit()是否可以执行类似操作:

我知道JQuery上传文件插件会让生活更轻松…但这不是我的选择…

谢谢你的指点


有没有可能

我过去也遇到过类似的问题,我想到的是使用一个不可见的iframe来上传文件并返回html结果,希望这能有所帮助

我以前也遇到过类似的问题,我想到的是使用一个不可见的iframe来上传文件并返回html结果,希望这能有所帮助

我想这就是你要找的

html代码:

<form id='uploadform' method='post' enctype='multipart/form-data' action='index.php/upload' target="hiddeniframe">
    <input name='myFile' id='myFile' type='file'/>
</form>
<iframe name="hiddeniframe" id="hiddeniframe" style="display: none"></iframe>
<input type='button' id='upload' value='Upload'/>
<div id='response'></div>

我添加了一个隐藏的iframe,并将表单的目标作为iframe的id。这将使表单提交到iframe中,这样整个页面就不会重新加载

javascript代码:

<script type="text/javascript">
    window.showUploadError = function(error) {
        $('#response').html(error);
    };


     $('#uploadform').submit();
</script>

window.showUploadError=函数(错误){
$('#response').html(错误);
};
$('#uploadform')。提交();
我添加了一个名为showUploadError的全局函数,在出现错误时将从php上载函数调用该函数

php代码

<?php
    function uploadFile(){
        try{
            // if success uploading
            ?>
            <script type="text/javascript">
                parent.location.href = '/main-page'
            </script>
            <?php 
            die();
        }catch(Exception $e){
        // if error 
        ?>
            <script type="text/javascript">
                parent.showUploadError('Upload failed');
            </script>
        <?php
   }
}

parent.location.href='/main page'
parent.showUploadError(“上载失败”);

我想这就是你要找的

html代码:

<form id='uploadform' method='post' enctype='multipart/form-data' action='index.php/upload' target="hiddeniframe">
    <input name='myFile' id='myFile' type='file'/>
</form>
<iframe name="hiddeniframe" id="hiddeniframe" style="display: none"></iframe>
<input type='button' id='upload' value='Upload'/>
<div id='response'></div>

我添加了一个隐藏的iframe,并将表单的目标作为iframe的id。这将使表单提交到iframe中,这样整个页面就不会重新加载

javascript代码:

<script type="text/javascript">
    window.showUploadError = function(error) {
        $('#response').html(error);
    };


     $('#uploadform').submit();
</script>

window.showUploadError=函数(错误){
$('#response').html(错误);
};
$('#uploadform')。提交();
我添加了一个名为showUploadError的全局函数,在出现错误时将从php上载函数调用该函数

php代码

<?php
    function uploadFile(){
        try{
            // if success uploading
            ?>
            <script type="text/javascript">
                parent.location.href = '/main-page'
            </script>
            <?php 
            die();
        }catch(Exception $e){
        // if error 
        ?>
            <script type="text/javascript">
                parent.showUploadError('Upload failed');
            </script>
        <?php
   }
}

parent.location.href='/main page'
parent.showUploadError(“上载失败”);

您可以选择将“submit”发送到“iframe”,然后使用“js”获取响应。在PHP中,您发送一条消息,然后在“JS”中进行解释

HTML:

PHP:


您可以选择将“submit”发送到“iframe”,然后使用“js”获取响应。在PHP中,您发送一条消息,然后在“JS”中进行解释

HTML:

PHP:


您需要使用ajax,这里是使用ajax上传文件的示例


在没有ajax的情况下,您可以通过GET方法重定向回用户并发送错误文本,并将此文本放入响应标记中

您需要使用ajax这里是使用ajax上传文件的示例


在没有ajax的情况下,您可以重定向回用户并通过GET方法发送错误文本,并将此文本放入响应标签中

能否请您详细说明如何引发异常,以便在上载失败时,应用程序将保持在同一页面上并显示错误。对于我来说,Slim会在出现任何异常时重定向到自己的错误页面。我不想向用户显示任何细微的异常。请详细说明您是如何产生异常的,这样,如果上传失败,应用程序将保持在同一页面并显示错误。对于我来说,Slim会在出现任何异常时重定向到自己的错误页面。我不想向用户展示任何细微的例外为什么你不能使用其他人的插件,而必须自己编写?还有,你读过这个吗?您知道异常确切发生的时间吗?如果您知道可以使用
throw()
强制
catch
块执行代码。我从来没有使用过
slim
,所以看看这个技巧是否对你有帮助。如果我错了,就别理我!!这真的是个例外,不是php错误吗?如果是这样的话,将不会触发catch块,您也不会收到异常消息。@Nal有很多动机让人重新发明轮子:出于教育目的,受到许可证或主管的限制,所使用的平台与插件不兼容,或者需要大量的更衣室来延迟响应。。感谢Vlad的回答…我不能使用插件,因为环境确实受到限制…这迫使我重写了很多API(如jQuery UI)已经具备的东西。为什么你不能使用其他人的插件,而必须编写自己的插件?还有,你读过这个吗?您知道异常确切发生的时间吗?如果您知道可以使用
throw()
强制
catch
块执行代码。我从来没有使用过
slim
,所以看看这个技巧是否对你有帮助。如果我错了,就别理我!!这真的是个例外,不是php错误吗?如果是这样的话,将不会触发catch块,您也不会收到异常消息。@Nal有很多动机让人重新发明轮子:出于教育目的,受到许可证或主管的限制,所使用的平台与插件不兼容,或者需要大量的更衣室来延迟响应。。感谢Vlad的回答…我不能使用插件,因为环境真的很受限制…这迫使我重写了很多像jQueryUI这样的API已经做过的事情
var runSubmitForm = function() {

   var 
      $iframe = $('#uploadformResponse'),
      fnLoadIframe = function(event) {
         $iframe.unbind('load');
         var 
             response = $iframe.contents(),
             aresponse = response.split('|');  

         console.log('debug respnse', response);

         if (aresponse.length != 2) {
            $('#response').html("Error I ???");
         }

         if (aresponse[0] == '1') {
             window.location = aresponse[1];
         }
         else if (aresponse[0] == '0') {
            $('#response').html(aresponse[1]);
         }
         else {
            $('#response').html("Error II ???");
         }
      };

   $iframe.bind('load', fnLoadIframe);
   $('#uploadform').submit();
};
function uploadFile(){
   try{
      // if success uploading
      echo '1|/main-page';
   } catch(Exception $e) {
      // if error 
      echo '0|' . $e->getMessage();
   }
   exit; // optional
}