- 我已经读过关于json是一种简单的方法,但是在读取数据后也读取了使用eval()的不良做法。所以我不知道如何使用返回的数据。
- 我能够从php脚本中检索数据的唯一方法是,如果我回显已经格式化的结果(这不是很方便)。此外,如果php脚本中存在重定向,则整个重定向页面html将被传递回javascript。
有人可以推荐一种从php发送变量或数组回javascript的方法吗?
答案 0 :(得分:3)
jQuery可以安全地为您解析JSON。您可以使用.ajax()
函数和相应的参数,也可以使用.getJSON()
函数。
jQuery.getJSON( url, data, callback )
您应该能够找到一个PHP库,通过谷歌搜索将数据结构转换为JSON,但我无法推荐任何具体的。
答案 1 :(得分:2)
使用jQuery,您可以使用JSON数据,而且非常安全,如果从同一域加载数据,则更加重要,我看不到安全漏洞。
在PHP中说(从版本5.2.0开始),您有将PHP数据转换为JSON的本机函数,反之亦然。 The function are json_encode and json_decode
例如:
$result = array();
$result['data1'] = "askdjaksd";
$result['data2'] = array(1,2,3);
echo(json_encode($result));
PHP为您完成所有工作。它也很快成为原生扩展。
答案 2 :(得分:1)
我认为没有任何其他可用的序列化方法明显优于JSON。你没有被迫使用eval()
。有可用的解析器,如Douglas Crockford的this one。
答案 3 :(得分:1)
由于JavaScript对XmlHttpRequests具有相同的域策略,除非您有 man in the middle 攻击或者您的服务器遭到入侵(在任何一种情况下,您和您的客户都有更大的问题),您不应该不必担心从服务器中评估一个JSON字符串(因为你控制了这些数据)。
正如其他人所说,还有其他口译员可供选择。此外,如果您真的需要,可以将数据作为XML发回。
要在另一个答案中回答您的评论:如果您希望您的网站使用和不使用JavaScript,我建议在会话中存储一个标记,而不是将其传递到整个网站。
答案 4 :(得分:1)
与其他人提到的一样,同域策略可以保护您免受eval()从服务器发送的json的恶意....
回答你对另一个答案的评论:
Jquery使用每个ajax请求发送此标头
HTTP_X_REQUESTED_WITH= "XMLHttpRequest"
因此,在PHP脚本上,您可以执行类似
的操作if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) &&
($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest")){
//do stuff assuming javascript is enabled
}else{
//do stuff assuming javascript is disabled
}
答案 5 :(得分:1)
的jQuery
$.post('somewhere.php',{ file: file, text: text },function(data) { //do stuff you can tell it to call a function or w/e you need to do },"json");
要访问数据,这很简单,函数(数据){允许您通过data.var访问json编码}
PHP
$file = $_POST['file'];
$text = $_POST['text'];
// do w/e you want with theses
// when your done and want to pass the vars back
echo json_encode("file" => $file,"text" => $text,"mynewvar" => $somevar);
现在,当你想要访问那些数据时,一个简单的例子就是在函数(数据)中:
function(data) {
var mynewvar = data.mynewvar;
var file = data.file;
var text = data.text;
//do w/e
}
希望能为你提供如何处理它的方向。