Parse的javascript CloudCode对httprequest的字符串操作添加了额外的反斜杠

时间:2015-01-22 19:32:02

标签: javascript string parse-platform mandrill cloud-code

我在解析的云代码中有简单的javascript来收集我在cloudcode中添加到我的httprequest以发送给mandrill的电子邮件地址列表。

但是,http请求似乎有额外的反斜杠(\)导致mandrill拒绝请求。然而,然后我在cloude代码中的警告框中打印相同的字符串,它完美地打印出来。我已经将httprequest日志与hardedcoded电子邮件列表请求(该请求成功)进行了比较,因此我知道这些额外的字符。

我真的不确定发生了什么,任何指针都会受到高度赞赏。

我的代码和日志部分的代码段如下:

以字符串形式收集电子邮件的云代码: 。

var query1 = new Parse.Query(Parse.User);
                       query1.equalTo("emailVerified", true);
                       query1.find({
                           success: function (object)
                           {
                                 var emaillink;
                               for (var i=0;i<object.length;i++)
                               {
                                   var testresult=object[i];
                                   if(i==0)
                                   {
                                     emaillink="\'"+testresult.get("email")+"\', \"name\" : \'"+testresult.get("username")+"\', \"type\" : \'to\' },";

                                   }
                                   else
                                   {
                                     emaillink=emaillink+"{ \"email\" : \'"+testresult.get("email")+"\', \"name\" : \'"+testresult.get("username")+"\', \"type\" : \'to\' },"
                                   }

                               }
                               emaillink = emaillink.substring(0, emaillink.length - 2);
                               alert(emaillink);
                               Parse.Cloud.httpRequest({...

cloudcode将这些电子邮件添加到mandrill的httprequest格式:

。 。

   "to": [
           {  "email": emaillink
           }
          ]

警报日志:

##################################################
# Alert                                          #
##################################################
#                                                #
# 'abc@gmail.com', "name" : 'abc               1 #
# ', "type" : 'to' },{ "email" : 'abcdefghijklnm #
# 101@gmail.com', "name" : 'abcdefgh', "type" :  #
# 'to' },{ "email" : 'qwertyiopau@yahoo.com', "n #
# ame" : 'qwertyiop', "type" : 'to'              #
#                                                #
#                                         [ OK ] #
#                                                #
##################################################

登录httprequest的云代码:

..."text":"[{\"email\":\"'abc@gmail.com', \\\"name\\\" : 'abc     1', \\\"type\\\" : 'to' },{ \\\"email\\\" : 'abcdefghijklnm101@gmail.com', \\\"name\\\" : 'abcdefghijklnm', \\\"type\\\" : 'to' },{ \\\"email\\\" : 'abcdefghijklnm@yahoo.in', \\\"name\\\" : 'abcdefghijklnm', \\\"type\\\" : 'to'\",\"status\":\"invalid\",\"_id\":\"18523fc4a3d24a1398c303972af47cd8\",\"reject_reason\":null}]","data":[{"email":"'abc@gmail.com', \"name\" : 'abc', \"type\" : 'to' },{ \"email\" : 'abcdefghijklnm101@gmail.com', \"name\" : 'abcdefghijklnm', \"type\" : 'to' },{ \"email\" : 'abcdefghijklnm@y.in', \"name\" : 'abcdefghijklnm', \"type\" : 'to'","status":"invalid","_id":"18523fc4a3d24a1398c303972af47cd8","reject_reason":null}],"buffer":{"0":91....

请忽略这些电子邮件,我已用一些随机电子邮件值替换了实际的电子邮件。这些值是正确的,我已经检查过了。

只是这些额外的\我无法解释。任何帮助都非常感谢。感谢

1 个答案:

答案 0 :(得分:0)

您没有以正确的方式构建阵列。以下是您的案例示例:

...
var emaillink = [] // Initialize an empty array;
for (var i=0;i<object.length;i++) 
{
    var testresult = object[i];

    emaillink.push({                        // We push each email in our array
        email: testresult.get("email"),
        name: testresult.get("username"),
        type: "to"
    })
}
...

这是构建JSON对象的方法,您不需要创建字符串。如果你想获得你的json数组的字符串,你只需要这样做:

emaillink.toString();

所以你只需要将这个对象传递给你的httpRequest。您可能不必执行'toString()'只需传递对象,httpRequest将对其进行字符串化。

要完全回答您的问题,额外的'\'是转义字符。您使用'\'来转义字符串中的''',当您发送字符串时,httpRequest也会转义您的字符。这就是为什么它会添加一些'\'以逃避您的字符'。