0

表格:

<form action="upload-document.aspx" onsubmit="sendAndClose();" method="post" enctype="multipart/form-data">
    <input name="fileToUpload" id="fileToUpload" type="file" />
    <input type="submit" name="submit" value="Send" />
</form>

阿贾克斯:

    function sendAndClose() {
        currentUrl = location.protocol + '//' + location.host + location.pathname;

        var data = new FormData();
        var file = $("#fileToUpload")[0].files[0];

        data.append("name", file.name);
        data.append("size", file.size);
        data.append("type", file.type);
        data.append("file", file);

        $.ajax({
            type: "POST",
            url: currentUrl + '/Persist',
            dataType: 'json',
            data: data,
            cache: false,
            contentType: false,
            processData: false,
            success: function () {
                parent.$.fancybox.close();
            },
            error: function (request, error) {
                alert("[" + error + "] - FAIL: " + request.responseText);
                parent.$.fancybox.close();
            }
        });
    }

代码隐藏:

[WebMethod]
public static bool Persist(object data)
{
    return true;
}

提交表单时,它会运行 ajax 并在进入 webmethod 之前直接进入错误回调。谁能告诉我为什么?

此外,在“var 文件”之后,我收到了显示文件名、大小等的警报……所以它获取了文件,问题是 ajax 拒绝与代码隐藏通信。

4

3 回答 3

0

您不能调用像http://localhost:40899/upload-document.aspx/Persist. currentUrl 不正确。

于 2013-05-15T16:23:30.480 回答
0

继我在评论部分的问题之后,我要补充一点,您的public static bool Persist...方法必须在页面中(ASPX)而不是用户控件(ASCX)。

这是因为页面 (ASPX) 通过 URL 对外部世界是“可见的”,而用户控件 (ASCX) 仅在服务器上用于构建页面而不是其自身的 URI,因此无法访问给外部呼叫者。

如果您需要在用户控件中调用该方法,则需要将您的Persist方法(带有WebMethod属性)移动到您的页面(ASPX),然后从该方法调用您的用户控件(ASCX)。

于 2013-05-16T08:08:22.977 回答
0

我有一个类似的问题,通过在 ajax 函数中添加这个参数来解决:

traditional: true

因此,为您的 AJAX 调用尝试以下代码:

$.ajax({
        type: "POST",
        url: currentUrl + '/Persist',
        dataType: 'json',
        data: data,
        cache: false,
        contentType: false,
        processData: false,
        traditional: true,
        success: function () {
            parent.$.fancybox.close();
        },
        error: function (request, error) {
            alert("[" + error + "] - FAIL: " + request.responseText);
            parent.$.fancybox.close();
        }
    });
于 2013-05-15T15:11:09.253 回答