使用包含“???”的字符串提交jQuery.ajax数据,它将值更改为“jQuery19107363727174233645_1373301489648?”

前端之家收集整理的这篇文章主要介绍了使用包含“???”的字符串提交jQuery.ajax数据,它将值更改为“jQuery19107363727174233645_1373301489648?”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
页面 javascript
var model = {"NumberOfcpus":"2","NumberOfCores":"4","OSType":"Linux","OSVersion":"???"};

        var id = 0;
        var success = false;
        //send to server:
        $.ajax(
            {
                async: false,data: JSON.stringify(model),dataType: "json",type: "post",url: serverSideURL

            });

实际发送到服务器的请求的内容

{"NumberOfcpus":"2","OSVersion":"jQuery19107363727174233645_1373301489648?"}

怎么了?是字符串“???” jQuery中某种特殊控制词或某些东西?

谢谢.

解决方法

如果我仔细阅读其他答案中的错误评论,真正的问题在于,在将json-string传递给数据之前将其字符串化.数据需要一个包含查询的字符串(例如“a = asdf& b = qwer”)或包含它将成为查询的键和值的Object.而是传递类似'{“a”:“asdf”,“b”:“qwer”}’的字符串,包含不是查询的字符串化数组.它以某种方式设法转换服务器理解的数据,但显然也会触发该错误/功能.

解决方案1

如果要通过$_POST [‘a’]访问数据,以获取JSON对象中的键“a”:

$.ajax( {
    async: false,data: model,//Pass the Array itself to the function
    dataType: "json",url: serverSideURL
});

(Source; Cowboy on jQuery bugs)

解决方案2

如果要检索JSON字符串:

$.ajax( {
    async: false,data: {
      "MyLilString": JSON.stringify( model )
    }
    dataType: "json",url: serverSideURL
});

在这种情况下,$_POST [“MyLilString”]包含序列化的JSON,您可以使用json_decode().

(Source; Ajpiano on jQuery bugs)

另一个消化

我从评论提取的另一个建议(但我现在无法找到-_-‘)是将jsonp设置为false.

$.ajax( {
    async: false,data: model
    dataType: "json",url: serverSideURL,jsonp: false
});

这应该会阻止jQuery将回调函数插入到请求体中.

原文链接:https://www.f2er.com/jquery/178667.html

猜你在找的jQuery相关文章