我们有一个使用trigger.io构建的ios应用程序。该应用程序使用forge.request.ajax向我们的服务器发送数据。我们的一个请求偶尔会抛出一个错误并返回:
{"message":"Invalid parameter not satisfying: url","type":"UNEXPECTED_FAILURE"}
由于输入参数是以json格式发送的,我怀疑用户输入的一些字符可能会破坏结构并导致此错误。我的代码如下:
forge.request.ajax({
url: "someurl.php",
dataType: "json",
data:"some=data&and=some&more=data&which=is inputted by user",
success: function (data) {
},
error: function (error) {
forge.request.ajax({
url: "errorlog.php",
dataType: "json",
data:"data=" + encodeURIComponent(JSON.stringify(error)),
success: function (data) {
},
error: function (error) {
}
});
}
});
这段代码给出了上述错误的一半时间。然后在另一半工作。ajax请求中的输入参数有什么限制吗?由于我不能编辑objective-c代码,所以我需要一个解决方案,最好是一个过滤器,以确保该函数能够处理输入的任何输入。
使用encodeURIComponent
可能会有所帮助:
var data = "some=data&and=some&more=data&which=is inputted by user";
forge.request.ajax({
url: "someurl.php",
dataType: "json",
data: encodeURIComponent(data)
...
将请求数据作为URL参数传递的gotchas的份额超过了它的份额,因此也值得一看StackOverflow这个问题:什么时候应该使用escape而不是encodeURI/encodeURIComponent?