valums Ajax-Upload onComplete responseJSON总是为空!

时间:2011-07-11 17:20:44

标签: asp.net ajax file-upload

我在ASP.Net表单应用中使用ajax-upload

我需要发送一个字符串哈希值,一旦将其保存在服务器上,就会识别该文件。

我在发出json字符串的ashx处理程序中这样做,但无论我从服务器发送什么,在javascript中我得到一个空对象......我做错了什么?

这是ashx上的on load方法的片段     //已编辑     context.Response.ContentType =“application / json”;     context.Response.ContentEncoding = System.Text.Encoding.UTF8;     context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

ProcessFile(context.Response);
context.Response.Write("{\"success\": true, \"hash\": " + _myHash + "}");

这是完整的

onComplete: function(id, file, responseJSON) {
    console.log(responseJSON);
}

5 个答案:

答案 0 :(得分:1)

您是否阅读了包中包含的server / readme.txt?

  

你应该将json作为text / html

返回

答案 1 :(得分:1)

使用AjaxUpload函数的属性responseType。将其设置为“json”。

像这样:

new AjaxUpload("#importButton",{
  action: "upload.html",
  name: 'name',  
  responseType: "json",
  allowedExtensions: ['xml'],
  onSubmit : function(file, ext){
  },
  onComplete: function(file, response){
  }  
}); 

答案 2 :(得分:0)

这些是我在返回JSON数据时设置的标题:

context.Response.ContentType = "application/json";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

当它们不正确时,我看到各种浏览器的奇怪行为。如果更改这些没有帮助,我会尝试消除ajax帖子,以验证您是否正在发送正确的数据。

如果您正在使用jQuery,$.ajax()方法也有一个noCache选项,您也可以进行调查。

答案 3 :(得分:0)

在我上传了上传者的代码后,我发现了问题,这件事发生在我身上,问题是响应的解析,所以,你必须在哈希上加上双引号,如下:

"{\"success\": true, \"hash\": \"" + _myHash + "\"}"

答案 4 :(得分:0)

这些是我必须对fileuploader.js文件所做的更改,以便它可以工作:

    this.log("innerHTML = " + doc.body.innerHTML);      
    // replace <pre> tags from IE Frame
    var content = doc.body.innerHTML.replace(/<pre>/gi, '').replace(/<\/pre>/gi, '');

    try {
        response = eval("(" + content + ")");
    } catch(err){
        response = {response: content};

我还改变了在JSON错误的情况下发出响应的方式:

        var response = xhr.responseText;

        try {
            response = eval("(" + xhr.responseText + ")");
        } catch(err){
            // emit an object with the offending responseText
            response = {responseText: response};
        }