2013-08-07 62 views
1

我寫了一個使用jquery將文件上傳到服務器的小腳本。該文件上傳成功,done:事件被調用沒有問題,但我有問題來處理答案。這是我的腳本:使用jquery解析文件上傳後的JSON響應

<input id="fileupload" type="file" name="carPicture" accept="image/*" multiple> 
    <div id="progress"> 
     <div class="bar" style="width: 0%;"></div> 
    </div> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js" type="text/javascript"></script> 
    <script src="@routes.Assets.at("javascripts/vendor/jquery.ui.widget.js")" type="text/javascript"></script> 
    <script src="@routes.Assets.at("javascripts/jquery.iframe-transport.js")" type="text/javascript"></script> 
    <script src="@routes.Assets.at("javascripts/jquery.fileupload.js")" type="text/javascript"></script> 
    <script> 
     $(function() { 
      'use strict'; 
      // Change this to the location of your server-side upload handler: 
      var url = "uploadCarPicture"; 
      $('#fileupload').fileupload({ 
       url: url, 
       dataType: 'json', 
       done: function (e, data) { 
        $.each(data.result.files, function (index, file) { 
         $('<p/>').text(file.name).appendTo('#files'); 
        }); 
       }, 
       fail: function (e, data) { 
        alert("File exists"); 
        }, 
       progressall: function (e, data) { 
        var progress = parseInt(data.loaded/data.total * 100, 10); 
        $('#progress .bar').css(
          'width', 
          progress + '%' 
        ); 
       } 
      }).prop('disabled', !$.support.fileInput) 
        .parent().addClass($.support.fileInput ? undefined : 'disabled'); 
     }); 
    </script> 
我有兩個問題

  1. 可變數據似乎是空的,因爲環路下方不運行,甚至一次。

     $.each(data.result.files, function (index, file) { 
          $('<p/>').text(file.name).appendTo('#files'); 
         }); 
    
  2. 答案是JSON文檔具有以下格式:{ 「E」:0},其中 「E」 是一個錯誤代碼。 「e」可能會返回許多不同的值,我希望能夠找出真實的響應,並不總是假定爲0.

任何想法?

+0

你的控制檯顯示的實際響應是什麼?這聽起來像生成的對象不是你所期望的格式。此外,而不是'$ .each',你應該使用'$(data).each'。 – DevlshOne

+2

如果響應是'{「e」:0}',那麼該對象顯然沒有'result'屬性,所以你不能遍歷'data.result.files'。 –

+0

解決第二個問題,然後第一個問題將自行解決 – Tomer

回答

8

我已經解決了。我做的Java腳本的小變化是這樣的:

done: function (e, data) { 
     $.each(data.files, function (index, file) { 
      $('<p/>').text(file.name); 
     }); 
     }, 

而且我已經改變了服務器是在迴應這種格式的JSON:

{ 文件: [ { 錯誤:0, name:「thumb2.jpg」, } ] }