我有一堆基于jquery的ajax调用,我正在VB.Net后端为客户端处理。在IE中,一切都运行良好,但我不能让它在任何其他客户端上工作。下面是ajax调用的示例。我不认为客户端实际上存在问题。
function gallery_update() {
var product_id = document.getElementById("hid_product_id").value;
var requestdata = new FormData();
requestdata.append("product_id", product_id);
$.ajax({
type: "POST",
url: "/Admin/Product/WebService.asmx/Gallery_Update",
async: true,
data: requestdata,
contentType: "multipart/form-data;charset=ISO-8859-1",
processData: false,
cache: false,
success: function (responsedata) {
gallery_draw(responsedata.childNodes['0'].textContent);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
在服务器端,我有一个像这样开始的网络服务:
<WebService(Namespace:="http://tempuri.org/")> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
<System.ComponentModel.ToolboxItem(False)> _
Public Class WebService
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function Gallery_Update() As String
Dim output As String = ""
Dim Product_ID As Integer = HttpContext.Current.Request.Form("product_id")
Dim one_product As prod_Product = New prod_Product()
one_product.Read(Product_ID)
Dim all_images As List(Of String) = New List(Of String)()
因此,一切都在IE中按预期工作,但在chrome(和firefox)中,request.form集合始终为空。
我已经完成了一些streamreader代码来解决它,我发现请求正文如下所示:
"------WebKitFormBoundaryYbtyKCr4yuYdjtMm Content-Disposition: form-data; name="product_id" 1 ------WebKitFormBoundaryYbtyKCr4yuYdjtMm-- "
"-----------------------------7e239e1fd0936 Content-Disposition: form-data; name="product_id" 2 -----------------------------7e239e1fd0936-- "
(顶部来自chrome,底部来自ie),我真的没有看到任何问题。 cr和lf呈现为空格,但它们是我所期望的。
我唯一真正的猜测是webkit边界存在一些问题。看起来IE使用十六进制作为其边界,而chrome使用更通用的字符串格式。