2011-07-20 7 views
1

Je travaille avec le plugin de téléchargement de fichiers jquery. hereLire les données json renvoyées par le contrôleur Rails

je télécharge un fichier et génère une réponse JSON comme suit:

@upload = Upload.new(params[:upload]) 
    respond_to do |format| 
     if @upload.save 
     format.json {render :json => [ @upload.to_jq_upload ].to_json} 
     end 

Ce que je voudrais faire est d'obtenir les informations de l'objet JSON lorsqu'il est renvoyé, mais je ne peux pas comprendre où il est envoyé. Quelqu'un peut-il aider à comprendre comment obtenir cette information?

Il y a aussi une fonction de rappel dans mes application.js comme suit:

$('#fileupload').bind('fileuploaddone', function (e, data) { } 

J'ai regardé ces données et je ne peux pas comprendre comment l'analyser. Si je fais data.url, il me donne l'url à supprimer sans l'id donc ce sont les données de téléchargement. Ce que je veux, c'est analyser les données renvoyées. data.result par exemple mais cela me donne juste l'objet Object.

Toute aide serait appréciée.

Voici la vue:

<div id="fileupload"> 
    <%= form_for @upload, :html => { :multipart => true } do |f| %> 
     <div class="fileupload-buttonbar"> 
      <label class="fileinput-button"> 
       <span>Add files... or drop them to upload</span> 
       <%= f.file_field :photo, :id => "upload_photo" %>     
      </label> 
     </div> 
    <% end %> 
    <div class="fileupload-content"> 
     <table class="files"></table> 
     <div class="fileupload-progressbar"></div> 
    </div> 
</div> 

<script id="template-upload" type="text/x-jquery-tmpl"> 
    <tr class="template-upload{{if error}} ui-state-error{{/if}}"> 
     <td class="preview"></td> 
     <td class="name">${name}</td> 
     <td class="size">${sizef}</td> 
     {{if error}} 
      <td class="error" colspan="2">Error: 
       {{if error === 'maxFileSize'}}File is too big 
       {{else error === 'minFileSize'}}File is too small 
       {{else error === 'acceptFileTypes'}}Filetype not allowed 
       {{else error === 'maxNumberOfFiles'}}Max number of files exceeded 
       {{else}}${error} 
       {{/if}} 
      </td> 
     {{else}} 
      <td class="progress"><div></div></td> 
      <td class="start"><button>Start</button></td> 
     {{/if}} 
     <td class="cancel"><button>Cancel</button></td> 
    </tr> 
</script> 
<script id="template-download" type="text/x-jquery-tmpl"> 
    <tr class="template-download{{if error}} ui-state-error{{/if}}"> 
     {{if error}} 
      <td></td> 
      <td class="name">${name}</td> 
      <td class="size">${sizef}</td> 
      <td class="error" colspan="2">Error: 
       {{if error === 1}}File exceeds upload_max_filesize (php.ini directive) 
       {{else error === 2}}File exceeds MAX_FILE_SIZE (HTML form directive) 
       {{else error === 3}}File was only partially uploaded 
       {{else error === 4}}No File was uploaded 
       {{else error === 5}}Missing a temporary folder 
       {{else error === 6}}Failed to write file to disk 
       {{else error === 7}}File upload stopped by extension 
       {{else error === 'maxFileSize'}}File is too big 
       {{else error === 'minFileSize'}}File is too small 
       {{else error === 'acceptFileTypes'}}Filetype not allowed 
       {{else error === 'maxNumberOfFiles'}}Max number of files exceeded 
       {{else error === 'uploadedBytes'}}Uploaded bytes exceed file size 
       {{else error === 'emptyResult'}}Empty file upload result 
       {{else}}${error} 
       {{/if}} 
      </td> 
     {{else}} 
      <td class="preview"> 
       {{if thumbnail_url}} 
        <a href="${url}" target="_blank"><img src="${thumbnail_url}"></a> 
       {{/if}} 
      </td> 
      <td class="name"> 
       <a href="${url}"{{if thumbnail_url}} target="_blank"{{/if}}>${name}</a> 
      </td> 
      <td class="size">${sizef}</td> 
      <td colspan="2"></td> 
     {{/if}} 
     <td class="delete"> 
      <button data-type="${delete_type}" data-url="${delete_url}">Delete</button> 
     </td> 
    </tr> 
</script> 

Répondre

1

Je ne suis pas au courant de rubis. Cependant, dans la liaison fileuploaddone, l'objet "data" contient les données à analyser ou à accéder directement.

data.jqXHR.responseText doit contenir la chaîne json des données renvoyées. Avec cela, vous pouvez (en Javascript au moins) appeler les éléments suivants (en fonction de ce que vous avez pour JSON) pour obtenir l'objet JSON:

jQuery.parseJSON(data.jqXHR.responseText) 

-ou-

JSON.parse(data.jqXHR.responseText) 

Alternativement (et beaucoup plus facilement), vous pouvez vérifier si data.result est valide. Si oui, il ressemblerait à quelque chose comme:

[Object {name = "image.jpg", size = 43554, type = "image/jpeg", plus ...}]

Pour y accéder le nom du fichier (par exemple), vous obtiendrez via:

data.result [0] .name

Hope this helps.

0

Veuillez essayer ceci dans votre contrôleur.

render :json => { files: [@upload.to_jq_upload] } 
Questions connexes