1

我尝试使用 jQuery 的上传插件。 http://valums.com/ajax-upload/

当我将返回响应类型设置为 json 时,firefox 会弹出一个对话框,询问我喜欢如何处理返回的 json 对象。

人们在上传脚本的作者页面上提出了同样的问题,但到目前为止还没有答案。希望这里的 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>
4

4 回答 4

2

http://api.jquery.com/jQuery.parseJSON/

var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
于 2010-11-10T06:11:15.923 回答
1

这个 jQuery 插件使与 JSON 之间的转换变得简单:http ://code.google.com/p/jquery-json/

此外,您可能对您引用的博客文章中的此评论感兴趣:

很抱歉向您的博客文章发送垃圾邮件(这很棒),但我想我会提到我发现了问题:

无论出于何种原因,<pre>当响应类型为 时,响应总是在整个响应周围有标签plain/text。这导致eval()调用失败。我目前的解决方案是在通话之前去掉这些标签eval(),现在一切正常。不是一个很好的解决方案,但至少我现在可以继续工作。

于 2009-05-02T17:36:28.940 回答
0

可能是这样,我不知道,因为我对那个插件一无所知,但是您可能需要查看您在服务器端设置的响应类型;您应该将 HTTP 响应设置为具有“text/plain”、“text/javascript”或“application/javascript”之类的内容/MIME 类型 - 看看这是否能解决您的问题。

于 2009-05-02T17:39:40.913 回答
0

I was looking for a solution for the same script and stumbled upon this page. I didn't found a solution online so here's how I fixed it:

@ upload-file.php: replace

echo "success".$cc; 

with

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

@ front end: replace

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');
}

with

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');
}

And to actually answer this question.

jQuery.parseJSON(response);

does..

于 2012-06-26T23:50:41.013 回答