代码之家  ›  专栏  ›  技术社区  ›  scottm

jQuery将数据发布到错误的相对URL

  •  1
  • scottm  · 技术社区  · 14 年前

    我有一个ASP.NETMVC应用程序。我试图将数据发布到一个动作,然后只呈现输出。我有一个页面,你可以查看一个产品,所以www.mysite.com/product/details/1 显示产品。在这个页面上,我通过RenderAction()呈现一个局部视图,它包含一些定价逻辑。我希望用户选择一些选项,然后让jquery发布选项以获得新的价格。

    $.post({
      url : "price/getprice",
      data : {"options" : chosenOptions},
      success : function(data) {
                  $("#price").text(data);
                }
    });
    

    url正在发布到 www.mysite.com/product/details/price/getprice

    这应该发到 www.mysite.com/price/getprice . 当我查看firebug中的“网络”选项卡时,它会显示:

    http://localhost:42427/Product/Details/%5Bobject%20Object%5D
    

    参数字典包含 的参数“id”的条目为空 不可为null的类型“System.Int32” 方法'System.Web.Mvc.ActionResult 'PrintPlaceWebsite.Controllers.ProductController'。

    但我不想发到那个地方所以…呃。

    5 回复  |  直到 14 年前
        1
  •  5
  •   Felix Kling    14 年前

    你指定了一个相对的URL,所以如果这个代码在站点上 www.mysite.com/a/b/c /a/b/price/getprice .

    您可能需要指定一个绝对URL:

    $.post({
      url : "/price/getprice",
      //     ^-- leading slash
      data : {"options" : chosenOptions},
      success : function(data) {
                  $("#price").text(data);
                }
    });
    
        2
  •  0
  •   Stuart    14 年前

    据JQuery所知,它的AJAX调用基于当前位置,我猜,当前位置是www.mysite.com/product/details/. 就像你有一个指向“myPage.html”的链接一样,你会尝试去www.mysite.com/product/details/myPage.html.

    <% = ResolveUrl("~/price/getprice") %>
    
        3
  •  0
  •   Makram Saleh    14 年前

    $.post({
      url : "http://mywesbite.com/price/getprice",
      data : {"options" : chosenOptions},
      success : function(data) {
              $("#price").text(data);
            }
    });
    
        4
  •  0
  •   scottm    14 年前

    所以,原来是我的错别字(别人的错别字,因为你们都抄了)。

    $.post({
      url : "/price/getprice",
      data : {"options" : chosenOptions},  <<<<< Right here. dang.
      success : function(data) {
              $("#price").text(data);
            }
    });
    

    你看到了吗?

    $.post({
      url : "/price/getprice",
      data : { options : chosenOptions},  <<<<< no quotes. arg.
      success : function(data) {
              $("#price").text(data);
            }
    });
    
        5
  •  0
  •   Dev    8 年前

    在视图中:添加

    <span data-url="@Url.Content("~/ControllerName/ActionName")" id="getValues" class="hidden"></span>
    

    注意:确保使用正斜杠(“/”)

    var getValues = $('span#getValues').attr('data-url');
    

    在Ajax调用中,设置

     $.ajax({
                type: 'GET',
                url: getValues,
                data: { id: abc},
                cache: false,
                success: function(result) {
                 }
           });