【问题标题】:jQuery $.ajaxSend() settings.data is nulljQuery $.ajaxSend() settings.data 为空
【发布时间】:2008-11-27 11:32:30
【问题描述】:

我发现了奇怪的错误(也许)。当我以散列的形式向$.ajax 发送参数,并尝试检查$.ajaxSend 中的参数时,我发现settings.data 为空,settings.url 包含参数是正常的。然后我查看了jQuery代码,发现数据被删除了。

    // If data is available, append data to url for get requests
    if ( s.data && type == "GET" ) {
        s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;

        // IE likes to send both get and post data, prevent this
        s.data = null;
    }

现在我需要解析 url ((。怎么办?

In JQuery, using ajaxSend to preview the url built by $.post call

在 cmets 中,我看到数据应该在那里。

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    默认情况下,作为非字符串数据传递的任何内容都会被处理并转换为查询字符串。所以,如果你使用 POST 来跳过这个 bug:

     $.post({
          url: "http://yourserver/ajax" ,
          data: {param1: 'val1', param2:'val2'}
     });
    

    $.ajaxSend 中,settings.data 的值将是'param1=val1&param2=val2',您需要解析参数,就像使用 GET 一样。

    如果您想避免解析 url 或数据,只需在构建设置对象时添加数据的副本。额外的参数应该不会造成任何问题。

     var data = {param1: 'val1', param2:'val2'};
     $.get({
          url: "http://yourserver/ajax" ,
          data: data,
          dataCopy: data
     });
    

    然后,您可以在$.ajaxSend 中检查settings.dataCopy 中的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多