【问题标题】:Send data from jquery ajax request not working从jquery ajax请求发送数据不起作用
【发布时间】:2019-09-04 06:44:51
【问题描述】:

我有一个从 jquery ajax 到 ActionResult 方法的发布请求,如下所示:

$("#itemTextbox, #itemTextboxNew, #quantity1Textbox").on("keydown", function (e) {
if ((e.keyCode == 120){
   var GetReportLast5SellAndBuyURL="/Trd/SellInvoice/GetReportLast5SellAndBuy";
   itemCode = $(this).val();
   $.ajax({
        type: "POST",
        url: GetReportLast5SellAndBuyURL,
        data: {ItemCode:itemCode},
        //contentType: "application/json; charset=utf-8",
        context: this,
        processData: false
    }).done(function (msg) { ... somethings ...});}

而在控制器中,ActionResult 是:

    [HttpPost]
    public ActionResult GetReportLast5SellAndBuy(string ItemCode)
    { ... somthings ...}

但是当ActionResult被称为“ItemCode”时为空……这一章有什么问题?

我尝试了这个食谱的不同形式,但问题仍然存在..

【问题讨论】:

  • 你试过用引号吗?喜欢data: {"ItemCode": itemCode}????
  • 是的..我试过了
  • 您是否验证过 itemCode = $(this).val();返回一些东西,并且开始时还不是 null?
  • 是的..它有价值..我检查了它
  • 好的最后一件事我知道你试过数据:{'ItemCode='+itemCode}?由于您试图将其作为字符串传递给您的操作结果。

标签: javascript jquery ajax


【解决方案1】:

试试这个:

 $.ajax({
        type: "POST",
        url: GetReportLast5SellAndBuyURL,
        data: JSON.stringify({ItemCode:itemCode}),
        datatype: "JSON",
        contentType: "application/json; charset=utf-8",
        processData: false
    }).done(function (msg) { ... somethings ...});}

【讨论】:

  • dataType 选项用于指定响应的预期格式。它通常可以省略,jQuery 会解决。它不会影响请求中的传出数据。
  • 您必须指定数据类型。另一件事是为什么您将上下文称为“ this”。那是无效的。尝试添加 -> contentType: "application/json; charset=utf-8",
  • 它必须是您的 URL。尝试在您的项目中更新不同的 url 格式。
  • 是的 .. 我删除了 " context:this " 并添加了 contentType: "application/json; charset=utf-8".. 所以它的值是真的.. 谢谢
【解决方案2】:

只需在脚本中注释 processData:false

$("#itemTextbox, #itemTextboxNew, #quantity1Textbox").on("keydown", function (e) {
if ((e.keyCode == 120){
   var GetReportLast5SellAndBuyURL="/Trd/SellInvoice/GetReportLast5SellAndBuy";
   itemCode = $(this).val();
   $.ajax({
        type: "POST",
        url: GetReportLast5SellAndBuyURL,
        data: {ItemCode:itemCode},
        //contentType: "application/json; charset=utf-8",
        context: this
       // processData: false
    }).done(function (msg) { ... somethings ...});}

在 [Setting processData to false in jQuery breaks my AJAX request

上进行了很好的解释

【讨论】:

    【解决方案3】:

    $("#itemTextbox, #itemTextboxNew, #quantity1Textbox").on("keydown", function (e) {
    if ((e.keyCode == 120){
       $.ajax({
            type: "POST",
            url: "/Trd/SellInvoice/GetReportLast5SellAndBuy?ItemCode="+$(this).val(),
            contentType: "application/json",
            context: this,
            datatype: "JSON",
            processData: false
        }).done(function (msg) { ... somethings ...});}
        
        
       // OR
        
        $("#itemTextbox, #itemTextboxNew, #quantity1Textbox").on("keydown", function (e) {
    if ((e.keyCode == 120){
       $.ajax({
            type: "POST",
            url: "/Trd/SellInvoice/GetReportLast5SellAndBuy",
            contentType: "application/json",
            data:JSON.stringify({ItemCode:$(this).val()})
            datatype: "JSON",
            context: this,
            processData: false
        }).done(function (msg) { ... somethings ...});}
        
        
        

    【讨论】:

    • 您的建议有效,但不是很好的解决方案。谢谢
    • @Majid821 您可以选择上述之一。我给出了一个可行的解决方案。就是这样,谢谢
    • 是的.. 感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多