2009-05-02 6 views
1

私はjQueryのアップロードプラグインを使用することをお勧めします。 http://valums.com/ajax-upload/return jsonオブジェクトのデコードにjqueryを使用するにはどうすればよいですか?

返信応答の種類をjsonに設定すると、返すjsonオブジェクトの処理方法を尋ねるダイアログがfirefoxによってポップアップされます。

アップロードスクリプトの作成者のページで同じ質問が表示されていますが、これまで回答がありませんでした。うまくいけば、ここのjavascriptの人は、私たちがこれをどう扱うことができるかを理解することができます。

ありがとうございました。

<script type= "text/javascript"> 
     /*<![CDATA[*/ 
     $(document).ready(function(){ 

      /* example 1 */ 
      var button = $('#button1'), interval; 
      new AjaxUpload(button, { 
       //action: 'upload-test.php', // I disabled uploads in this example for security reasons 
       action: '/posts/upload_images/', 
       name: 'myfile', 
       responseType: 'json', 
       onSubmit : function(file, ext){ 
        // change button text, when user selects file   
        button.text('Uploading'); 

        // If you want to allow uploading only 1 file at time, 
        // you can disable upload button 
        this.disable(); 

        // Uploding -> Uploading. -> Uploading... 
        interval = window.setInterval(function(){ 
         var text = button.text(); 
         if (text.length < 13){ 
          button.text(text + '.');      
         } else { 
          button.text('Uploading');    
         } 
        }, 200); 
       }, 
       onComplete: function(file, response){ 
        var json = response; 
        alert(json); 
        button.text('Upload'); 

        window.clearInterval(interval); 

        // enable upload button 
        this.enable(); 

        // add file to the list 
//     $('<li></li>').appendTo('#example1 .files').text(json.response_text);      
        $('<li></li>').appendTo('#example1 .files').text(file);      
       } 
      }); 
     }); 
    /*]]>*/ 
</script> 

答えて

1

このjQueryプラグインは、JSONにしてから変換するには、それが簡単になります:http://code.google.com/p/jquery-json/

また、あなたが参照ブログ記事にthis commentに興味があるかもしれません:

あなたをスパムして申し訳ありません

ブログ投稿(これは素晴らしい)ですが、私は問題が見つかったと言います。

何らかの理由で、応答は常に<pre>タグレスポンスのタイプがplain/textの場合、レスポンス全体をそのため、eval()コールが失敗しました。私の現在の解決策は、eval()コールの前にこれらのタグを取り除くだけで、今はすべて動作します。素晴らしい解決策ではありませんが、少なくとも私は今のところ仕事を続けることができます。

+1

私は経験から話すことはできませんが、うまくいけば、彼が使用しているプラ​​グインはまだJSONをデコードするための別のプラグインを必要としません。 –

0

これは、私がそのプラグインについて何も知らないので分かりませんが、サーバー側で設定している応答の種類を調べる必要があるかもしれません。 "text/plain"、 "text/javascript"、 "application/javascript"などのコンテンツ/ MIMEタイプを持つようにHTTPレスポンスを設定する必要があります。

+0

私の応答タイプは "application/json"です。そして、フォームからテキストを送信するもう1つのAjaxテストアプリと、フロントエンドが適切にプロンプ​​トを表示するjsonを使用してバックエンドの応答を返しました。だから私はバックエンドでデータを処理してjsonを返す問題があるとは思わない。そのテストアプリケーションは、jqueryのjquery.postのみを使用します。 – ViX

+0

Gotcha - まあ、幸運。もし私が時間があれば、私はおそらくこれをより注意深く見るだろう。しかし、それは土曜日であり、私は他にもできることがあります。 :)あなたはすぐに解決策を見つけることを願っています! –

+0

私はバックエンドに何か問題があるかもしれないと考えています。私はdjangoを使用しており、他の人がjsonをどのように扱うかを見るためにデモを読み込んでダウンロードしようとします。後で再び投稿されます。みんなありがとう。 – ViX

0

私は同じスクリプトのためのソリューションを探していると、このページにつまずきました。私はやったので、ここでは、オンラインで解決策を見つけていないが、私はそれを固定方法は次のとおりです。

upload-file.php @: front end @

echo json_encode(array(
status' => 'success', 
'id' => $picid, 
'image' => $imgurl 
)); 

echo "success".$cc; 

を置き換える:

var bb=response.substr(0,7) 
var idd=response.replace('success',' '); 
var idb =idd.replace(/^\s*|\s*$/g,''); 
if(bb==="success") 
{ 
    $('<span></span>').appendTo('#files').html('<img src="images/'+file+'" alt="" width="120" height="120" style="margin:5px;" />').addClass('success'); 
} 
else 
{ 
    $('<span></span>').appendTo('#files').text(file).addClass('error'); 
} 
を置き換えます

var what = jQuery.parseJSON(response); 
if(what.status == 'success') 
{ 
    $('<span id='+what.id+'></span>').appendTo('#files').html('<img src="'+what.image+'" alt="" width="120" height="120" style="margin:5px;" /><br><a href="javascript:void(0)" onClick="deleteFile('+what.id+');">Delete</a>').addClass('success'); 
} 
else 
{ 
    $('<span></span>').appendTo('#files').text(response).addClass('error'); 
} 

そして、実際にこの質問に答えます。

jQuery.parseJSON(response);

ん..

関連する問題