Javascript 如何使用ajax发布复杂的url请求
我想用这样的字符串向标签打印API发送一篇ajax帖子,但似乎有语法错误或其他错误,请给出一些说明,谢谢 这是用于打印标签的web API 下面是Asp.NETMVC5视图页面中的javascript代码 url如下所示:Javascript 如何使用ajax发布复杂的url请求,javascript,c#,ajax,Javascript,C#,Ajax,我想用这样的字符串向标签打印API发送一篇ajax帖子,但似乎有语法错误或其他错误,请给出一些说明,谢谢 这是用于打印标签的web API 下面是Asp.NETMVC5视图页面中的javascript代码 url如下所示: var urlString = "http://localhost:3112/PrintService?REQUEST_DATA={ "PRINT_REQUEST": {
var urlString = "http://localhost:3112/PrintService?REQUEST_DATA={
"PRINT_REQUEST": {
"PRINT_NAME": "TSC TTP-345 (TEST)",
"LABEL_QTY": 1,
"TEMPLATE_PATH": "WD.LAB",
"PRINT_DATA": [
{
"storage": "",
"SPEC": "",
"ITEM": "",
"QTY": "500",
"DEMAND": "0",
"EXP_DATE1": "2021-05-21",
"EXP_DATE2": "2021-05-21",
"ALLERGENS": "",
"WD_DATE": "2019-10-29 23:59:59",
"WD_USER": "TEST",
"WD_USER_NAME": "TEST",
"TCI_LOTNO": "20190522",
"SHOP_ORDER": "",
"SHOP_ORDER_ITEM": "",
"SHOP_ORDER_DESC": "",
"SPLIT_SFC_COUNT": "",
"SUP_LOTNO": "",
"REPRINT": null,
"PACKCOUNT": "",
"SFC": "",
"WEIGHT": "",
"PCS": "",
"SKIN_WEIGHT": -500
}
]
}
}";
$.ajax({
type: "POST",
url: urlString,
data: {
},
dataType: 'html',
success: function (ret) {
labeldata = ret;
window.alert("OK");
},
error: function (ret) {
window.alert(ret);
}
})
像这样的ajax:
var urlString = "http://localhost:3112/PrintService?REQUEST_DATA={
"PRINT_REQUEST": {
"PRINT_NAME": "TSC TTP-345 (TEST)",
"LABEL_QTY": 1,
"TEMPLATE_PATH": "WD.LAB",
"PRINT_DATA": [
{
"storage": "",
"SPEC": "",
"ITEM": "",
"QTY": "500",
"DEMAND": "0",
"EXP_DATE1": "2021-05-21",
"EXP_DATE2": "2021-05-21",
"ALLERGENS": "",
"WD_DATE": "2019-10-29 23:59:59",
"WD_USER": "TEST",
"WD_USER_NAME": "TEST",
"TCI_LOTNO": "20190522",
"SHOP_ORDER": "",
"SHOP_ORDER_ITEM": "",
"SHOP_ORDER_DESC": "",
"SPLIT_SFC_COUNT": "",
"SUP_LOTNO": "",
"REPRINT": null,
"PACKCOUNT": "",
"SFC": "",
"WEIGHT": "",
"PCS": "",
"SKIN_WEIGHT": -500
}
]
}
}";
$.ajax({
type: "POST",
url: urlString,
data: {
},
dataType: 'html',
success: function (ret) {
labeldata = ret;
window.alert("OK");
},
error: function (ret) {
window.alert(ret);
}
})
使用encodeURI()
:
您可以创建一个模式,并将其传递到控制器中,如下所示
var url = 'http://localhost:3112/PrintService';
var model = {
"PRINT_REQUEST": {
"PRINT_NAME": "TSC TTP-345 (TEST)",
"LABEL_QTY": 1,
"TEMPLATE_PATH": "WD.LAB",
"PRINT_DATA": [
{
"storage": "",
"SPEC": "",
"ITEM": "",
"QTY": "500",
"DEMAND": "0",
"EXP_DATE1": "2021-05-21",
"EXP_DATE2": "2021-05-21",
"ALLERGENS": "",
"WD_DATE": "2019-10-29 23:59:59",
"WD_USER": "TEST",
"WD_USER_NAME": "TEST",
"TCI_LOTNO": "20190522",
"SHOP_ORDER": "",
"SHOP_ORDER_ITEM": "",
"SHOP_ORDER_DESC": "",
"SPLIT_SFC_COUNT": "",
"SUP_LOTNO": "",
"REPRINT": null,
"PACKCOUNT": "",
"SFC": "",
"WEIGHT": "",
"PCS": "",
"SKIN_WEIGHT": -500
}
]
}
};
$.ajax({
type: "POST",
url: url,
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(model),
dataType: 'html',
success: function (ret) {
labeldata = ret;
window.alert("OK");
},
error: function (ret) {
window.alert(ret);
}
})
在控制器端,您可以传递如下模型
public class PRINTDATA
{
public string storage { get; set; }
public string SPEC { get; set; }
public string ITEM { get; set; }
public string QTY { get; set; }
public string DEMAND { get; set; }
public string EXP_DATE1 { get; set; }
public string EXP_DATE2 { get; set; }
public string ALLERGENS { get; set; }
public string WD_DATE { get; set; }
public string WD_USER { get; set; }
public string WD_USER_NAME { get; set; }
public string TCI_LOTNO { get; set; }
public string SHOP_ORDER { get; set; }
public string SHOP_ORDER_ITEM { get; set; }
public string SHOP_ORDER_DESC { get; set; }
public string SPLIT_SFC_COUNT { get; set; }
public string SUP_LOTNO { get; set; }
public object REPRINT { get; set; }
public string PACKCOUNT { get; set; }
public string SFC { get; set; }
public string WEIGHT { get; set; }
public string PCS { get; set; }
public int SKIN_WEIGHT { get; set; }
}
public class PRINTREQUEST
{
public string PRINT_NAME { get; set; }
public int LABEL_QTY { get; set; }
public string TEMPLATE_PATH { get; set; }
public List<PRINTDATA> PRINT_DATA { get; set; }
}
public class Model
{
public PRINTREQUEST PRINT_REQUEST { get; set; }
}
公共类PRINTDATA
{
公共字符串存储{get;set;}
公共字符串规范{get;set;}
公共字符串项{get;set;}
公共字符串数量{get;set;}
公共字符串请求{get;set;}
公共字符串EXP_DATE1{get;set;}
公共字符串EXP_DATE2{get;set;}
公共字符串{get;set;}
公共字符串WD_DATE{get;set;}
公共字符串WD_USER{get;set;}
公共字符串WD_USER_NAME{get;set;}
公共字符串TCI_LOTNO{get;set;}
公共字符串存储顺序{get;set;}
公共字符串SHOP_ORDER_ITEM{get;set;}
公共字符串SHOP_ORDER_DESC{get;set;}
公共字符串拆分\u SFC\u计数{get;set;}
公共字符串SUP_LOTNO{get;set;}
公共对象重新打印{get;set;}
公共字符串PACKCOUNT{get;set;}
公共字符串SFC{get;set;}
公共字符串权重{get;set;}
公共字符串PCS{get;set;}
公共整型皮肤重量{get;set;}
}
公共类打印请求
{
公共字符串PRINT_NAME{get;set;}
公共整数标签_数量{get;set;}
公共字符串模板_路径{get;set;}
公共列表打印_数据{get;set;}
}
公共类模型
{
公共PRINTREQUEST PRINT_请求{get;set;}
}
您应该将这个不带URL的字符串放在数据部分,您不能这样使用它。为什么要将所有数据作为查询字符串传递?您可以创建一个模型,然后在控制器中传递整个模型。谢谢,标签会打印出来,但ajax会转到错误部分并返回ret作为[object object]警告,还有什么我需要注意的吗?但它仍然打印!谢谢删除数据类型:html和see在控制台中从源“”访问url处的XMLHttpRequest已被CORS策略阻止:请求的资源上不存在“访问控制允许源”标头。看起来我应该在ajax中添加一些额外的头信息?不太明白,谢谢。是的,你应该在
PrintService
文件中添加标题Access Control Allow Origin:
。谢谢你的建议,我应该稍后尝试Vishal modi的模型设计答案。我注意到在问号后的urlString中有一个名为“REQUEST\u DATA=”的参数,所以我可以忽略这个“REQUEST\u DATA”在您的模型设计答案中?谢谢。是的,现在您正在发布整个模型。所以你不需要它。谢谢你对MVC概念的回答,它清晰而有用。