格式化用户输入的文本输入以通过JSON / AJAX发送到PHP的正确方法?

时间:2012-02-15 18:21:35

标签: php javascript jquery ajax json

我遇到了一些用户输入的问题,我希望通过包含特殊字符的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);
?>

更清楚的是,当包含特殊字符时,不会触发成功事件或错误事件。

我看着萤火虫,当包含特殊字符时,它似乎根本不发送任何东西......当然,它只是在字母或其他东西时发生。

3 个答案:

答案 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))工作