2008-11-27 49 views
1

我发现了奇怪的错误(也许)。当我以散列形式向$ .ajax发送参数,并试图检查$ .ajaxSend中的参数时,我发现settings.data为null,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

这里的意见,我看到的数据应该在那里。

回答

1

过去了默认情况下任何东西因为不是字符串的数据会被处理并转换为查询字符串。因此,如果您使用POST来跳过该错误:

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

in $.ajaxSendsettings.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检查数值。