Ajax调用不接受带有撇号的名称作为参数

时间:2015-04-24 10:09:50

标签: javascript jquery

$(".loadingPnl").removeClass('hdn');

var siteurlA = window.location.protocol + "//" + window.location.host + _spPageContextInfo.siteServerRelativeUrl;
var callUrl = siteurlA + "/_layouts/15/SynchronyFinancial.Intranet/CreateMySite.aspx/SaveAvailableFavoriteItem";

var linkName = $('.txtLinkName').val();
linkName = linkName.replace("'","\'");

$.ajax({
    type: "POST",
    url: callUrl,
    data: "{'linkName': '" + linkName + "', 'webSiteUrl':'" +  $('.txtWebAddress').val() + "','iconId':'" + $(".ddlIcons").val() + "'}",
    contentType: "application/json; charset=utf-8",
    processData: false,
    dataType: "json",
    success: function (response) {
        return true;
    },
    error: function (response) {
        return true;
    }
});

return true;

}

3 个答案:

答案 0 :(得分:4)

问题是您自己构建JSON作为请求参数。此外,您正在构建invalid JSON(JSON属性名称​​始终带有双引号("))。

相反,传递一个对象并让jQuery负责如何发送它 - 如果你传递它而不是字符串服务器可以解决它。如果确实想要自己做,您也可以将对象传递给JSON.stringify

var payload = {
    linkName: linkName,
    webSiteUrl: $('.txtWebAddress').val(),
    iconId: $(".ddlIcons").val()
};



 $.ajax({
    type: "POST",
    url: callUrl,
    data: JSON.stringify(payload), // or just payload
    contentType: "application/json; charset=utf-8",
    processData: false, // if you just pass payload, remove this
    dataType: "json" 
    // you had two `return`s here, but they wouldn't work, make sure
    // you understand why
    // http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call
});

答案 1 :(得分:0)

您可以改为发送JSON。如果你想要String,也可以使用 JSON.stringify

{
    'linkName' : linkName,
    'webSiteUrl' : $('.txtWebAddress').val(),
    'iconId' :  $(".ddlIcons").val()
}

答案 2 :(得分:0)

不要自己创建JSON字符串,也不要使用JSON.stringify()。

自己创建JSON字符串的问题是为JavaScript正确地转义字符串(这可能很棘手)。 see Special Characters

JSON.stringify的问题是我发现它比XMLHttpRequest更慢,这很奇怪,因为我认为它在幕后使用JSON.stringify。

XMLHttpRequest正在为您处理此问题。如果你只是将对象作为数据传递,那么XMLHttRequest就可以解决问题。

$.ajax({
   type: "POST",
   url: callUrl,
   data: {'linkName': linkName, 
          'webSiteUrl': $('.txtWebAddress').val(),
          'iconId': $(".ddlIcons").val()
         },
   contentType: "application/json; charset=utf-8",
   processData: false,
   dataType: "json",
   success: function (response) {
       return true;
   },
   error: function (response) {
       return true;
   }
});