我遇到了一些用户输入的问题,我希望通过包含特殊字符的AJAX将其作为JSON发送给PHP,例如“,”等。我正在发送数组的内容(用于slickgrid),除非包含这些字符,否则一切正常。我知道PHP有一个方便的函数mysql_real_escape_string,但有没有任何类型的jquery模拟?这是相关的代码:
req = $.ajax({
url: url,
dataType: "text",
data: {"data": $.JSON.encode(data)},
type: "post",
success: onSaveSuccess,
error: onSaveError
});
以下是提交给它的PHP:
<?php
//$data = array();
//if (isset($_POST['data']))
//{
//$data = json_decode($_POST['data']);
//}
//header('Content-Type: text/javascript');
//echo json_encode($data);
print_r($_POST);
?>
更清楚的是,当包含特殊字符时,不会触发成功事件或错误事件。
我看着萤火虫,当包含特殊字符时,它似乎根本不发送任何东西......当然,它只是在字母或其他东西时发生。
答案 0 :(得分:0)
这是由于来自here的脚本显然在某些类型的输入上失败了。切换到json2.js并使用JSON.stringify解决了这个问题。
答案 1 :(得分:0)
data: {"data": $.JSON.encode(data)},
传递一个比你需要的更复杂的JSON对象。
$data = json_decode($_POST['data']);
正在寻找一个序列化的JSON对象,但是jQuery在后台为你做了很多工作。
试试这个
data: $.JSON.encode(data),
在您的AJAX通话中。然后在PHP中
$data['myPostValue'] = $_POST['myPostValue'];
您正在向$.ajax
调用发送一个JSON对象,它正在将其更改为服务器通常从帖子中获取的名称值对。
答案 2 :(得分:-1)
javascript具有escape()
功能。你可以$.JSON.encode(escape(data))
工作