如何将 JavaScript 变量传递给 jQuery ajax 请求
Posted
技术标签:
【中文标题】如何将 JavaScript 变量传递给 jQuery ajax 请求【英文标题】:How to pass JavaScript variable to jQuery ajax request 【发布时间】:2015-08-24 14:25:57 【问题描述】:我正在尝试将变量传递给 jquery ajax 请求:
$(document).ready(function()
// get page number
var page = parseInt(getUrlParameter('page'));
if (page < 1) page = 1;
var page_next = page + 1;
$.ajax(
type: "GET",
data:
page: page,
,
dataType: 'json',
...
不幸的是,变量“page”似乎不存在于 ajax 请求中。做一个 cosole.log(page); inside 揭示了“NaN”作为一个值。
问题好像是
if (page < 1) page = 1;
如果通过 get 检索到的这个值不存在,那么页面将为 NoN。
如何确保页面始终定义为最小 1?
【问题讨论】:
该方法是绝对正确的,错误可能在函数getUrlParameter('page')
中,它没有返回有效的响应(或者不是数字或任何可以转换为此类的东西)。你能告诉我们这个功能吗?
从您目前共享的代码来看,该方法的唯一问题是you don't have a radix on parseInt,但这不会导致此问题。正如 briosheje 所说,getUrlParameter
返回的任何东西都不是可以转换为数字的东西,因此:NaN:不是数字
问题似乎出在上面的人指出的 getURLParameter 函数上。尝试使用 var page = 1;并查看变量是否包含值 1。
刚刚缩小了错误范围。问题在于: if (page
@merlin 请检查我的回答,如果您收到 Nan,我建议进行验证,以便将页面默认为 1。
【参考方案1】:
您的 getUrlParameter
正在返回无法转换为数字 NaN = Not a Number
的内容,如果您共享该功能,也许我们可以进一步调试您问题的根本原因,同时,我建议进行以下验证:
var page = parseInt(getUrlParameter('page'));
if (page < 1 || isNaN(page)) page = 1;
var page_next = page + 1;
这样,如果您的页面不是数字,则默认为第 1 页。 希望这可以解决问题并帮助您。
【讨论】:
那很好,但我宁愿说他应该修复getUrlParameter而不是它的结果。我的意思是,结果应该已经是一个数字,所以他应该在 function 中而不是在它之后断言,特别是从我们不知道他如何/从哪里获取这些数据的那一刻起对吧? 这就是我编辑问题的原因。如果他不共享函数就无法找到根本原因,所以我只是提出了一个建议,以使代码更健壮。如果用户在 url 中键入除数字以外的任何内容,应用程序加载页面 1 而不是崩溃或显示错误会很好。 这导致了正确的方向。如果我将 parseInt 留在里面,则可以使用。如果我删除它,页面+1 会显示 11 而不是 2。 您应该离开 parseInt 以使其更健壮。我写的条件是安全检查,如果用户在 url 中键入除数字以外的任何内容,则默认页面为 1。【参考方案2】:如果您的问题在 if 语句中,我能想到的最快解决方案(尽管我不赞成)是这个:
替换:
var page = parseInt(getUrlParameter('page'));
与:
var page = +getUrlParameter("page") || 1;
如果页面为假(NaN 为假),则将其设置为 1,否则将其设置为结果。
小提琴示例:
function getUrlParameter ( param )
return param === "page" ? 5 : false;
var page = +getUrlParameter("hello") || 1;
alert(page);
page = +getUrlParameter("page") || 1;
alert(page);
http://jsfiddle.net/51tvdsve/
在任何情况下,您都应该尝试修复您的 getUrlParameter 函数,而不是尝试避免其输出,但这只是我的意见。
【讨论】:
以上是关于如何将 JavaScript 变量传递给 jQuery ajax 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Blade 格式 HTML 将 PHP 变量传递给 JavaScript 函数