2010-10-13 75 views
0

我有一個功能頁面傳送數據到頁面的WebMethodjQuery的AJAX後有文件上傳

[WebMethod()] 
public static string sayHello(string pTest, string pText) 
{ 
    return pTest + " - " + pText; 
} 

我稱之爲使用這個jQuery

$(document).ready(function() { 
    $("#sayHelloButton").click(function (event) { 
    var name = $('#name').val(); 
    var text = $('#text').val(); 
    var dataString = JSON.stringify({ 
     pTest: name, 
     pText: text 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "page.aspx/sayHello", 
     contentType: "application/json; charset=utf-8", 
     data: dataString, 
     dataType: "json", 
     success: AjaxSucceeded, 
     error: AjaxFailed, 
     beforeSend: AjaxStart, 
     complete: AjaxEnd 
    }); 
    }); 
}); 

但現在它也應該可以上傳文件在這裏我有點失落。

從我在這裏可以閱讀的不同帖子中,它是不可能的,但如果我錯了,請糾正我 - 但我已經看到幾個jQuery插件,使上傳成爲可能,例如,通過一個Flash腳本,但是如何才能通過一次點擊發布數據和上傳?有沒有人有任何建議,上傳插件是最好的 - 以及我如何成功上傳和張貼在一個動作?

回答

0

不能告訴所有插件,但我使用jQuery Form沒有任何問題。不涉及Flash,它只是創建隱藏的iframe。

Here's a demo

但它怎麼會那麼有可能這兩個職位數據,並上傳只有一個點擊
的過程是一樣的正常的Ajax請求。您聲明一個表單元素,但不是$('#myform').submit();$('#myform').ajaxSubmit()

+0

請糾正我,如果我錯了,但如果我是你建議我用ASP.NET對只有1形式標記我想它提交了很多不相關的東西(如視圖狀態和元素,屬於頁面的另一部分)使得操作變慢,並且我不能像我的例子那樣使用特定參數來定位WebMethod? – keysersoze 2010-10-13 16:48:23

+0

@keysersoze默認情況下,是的。我會嘗試從JavaScript創建一個隱藏的表單,並附上您的文件輸入(臨時)。但從來沒有解決這個問題,所以沒有保證。 – 2010-10-13 17:00:13

0

假設sayHelloButton是您正在使用上傳文件的形式提交按鈕的ID,一定要加:event.preventDefault();$("#sayHelloButton").click()功能或使用javascript.void();在表格上,以防止瀏覽器使用其發佈數據默認行爲。否則,你的ajax代碼將永遠不會執行。

$("#sayHelloButton").click(function (event) { 
event.preventDefault(); 
var name = $('#name').val(); 
var text = $('#text').val(); 
var dataString = JSON.stringify({ 
    pTest: name, 
    pText: text 
});