gpt4 book ai didi

javascript - 如何防止自动解析、AJAX 获取的 JSON 成为窗口变量?

转载 作者:行者123 更新时间:2023-11-30 23:52:02 25 4
gpt4 key购买 nike

我使用 JSON 通过 AJAX 从后端向前端传输一些数据(当然是 JavaScript)。 XMLHttpRequest 由 Prototypejs 编写的 AJAX 处理程序完成(我仍在迁移到 jQuery 的过程中,但 noConflict 模式允许我同时运行两者),之后 PHP 发送带有一些数据的 X-Json header 就像objects = {'foo': 'bar'}

Prototypejs-Ajax.Requestjson 变量传递给 onSuccess 回调,其中包含所有 JSON 数据,因此处理过程是“困难的部分。但是,我注意到,由于 JSON 是自动评估的,因此 objects 变量被设为全局变量(因此成为 window 对象的成员。

我知道这并不是一个问题,因为它只是一个未使用的变量,但我总是试图尽可能远离全局变量。此外,在某些情况下,数据集可能非常大,因此它只是一个巨大的重复变量,其中一个变量从未被使用过。所以,如果可以的话,我宁愿失去全局。

我的问题:如何?如果发生这种情况有充分的理由,或者这只是 Prototypejs 特定的问题,或者这只是表明我做错了什么,请告诉我:-)

谢谢!

最佳答案

您是否从 PHP 发回 objects = {"foo":"bar"} ?发送JSON时,只需发送{"foo":"bar"}即可获取数据作为eval的返回结果:

var json = '{"foo":"bar"}'; // This string would really be coming from PHP
// ...
var objects = eval('(' + json + ')'); // objects variable will be limited to the
// current scope.

如果由于某种原因,您必须计算 objects = ...,您可以在运行 eval 之前将变量限制为当前范围:

var objects;
eval('objects = {"foo":"bar"}');
<小时/>

请注意 PHP 函数 json_encodejson_decode将为您创建“正确的”JSON,这意味着它将使用双引号,并且不会使用任何类型的赋值(真正的 JSON 仅限于数组/对象作为最外层的值,并且它可能不包含赋值或函数调用。请参阅JSON specification。)

关于javascript - 如何防止自动解析、AJAX 获取的 JSON 成为窗口变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com