最初,我试图将Javascript JSON对象发送到PHP页面,但没有成功。
使用以下测试代码:
var testobj = {
"test1":"test1data",
"test2":"test2data",
"test3":"test3data"
};
alert(testobj.test1);
$.ajax({
type: "POST",
url: "ajaxtest.php",
dataType: "json",
data: testobj
})
.error(function( msg ) {
alert( "Error: " + msg );
})
.success(function( msg ) {
alert( "Success: " + msg );
});
从不发送数据,并且始终返回错误。
删除'dataType'属性或将其定义为除'json'以外的任何其他内容都将返回'success',但仍未发送任何数据。
我可以使用与“ data:”值完全相同的对象代码,并且确实会发送它,但是当我使用JSON对象时却不能。
因此,我发送一个数组,而不是:
var testobj = new Array();
testobj = {
"test1":"test1data",
"test2":"test2data",
"test3":"test3data"
};
alert(testobj.test1);
$.ajax({
type: "POST",
url: "ajaxtest.php",
data: testobj
})
.error(function( msg ) {
alert( "Error: " + msg );
})
.success(function( msg ) {
alert( "Success: " + msg );
});
完全相同的代码,除了(a)将变量定义为Array而不是JSON对象,以及(b)从.ajax调用中删除了'dataType'属性。
使用$ _POST数组获取目标页面上的Array元素。
无论如何,我从不在乎JSON作为传递数据的方法,所以这并不让我担心。但是我确实想知道jQuery(v.1.9.1)的当前状态
我的JSON构造有问题吗?通过jQuery AJAX发送JSON对象有什么用?为什么'dataType:“ json”'属性有问题?
最佳答案
这里的第一件事是了解dataType
参数的实际用途。它用于告诉jQuery您期望从服务器收到什么。您收到错误消息是因为您告诉jQuery需要JSON,但这不是您所提供的。它正在尝试解析它并失败。数据正在发送到服务器。
其次,您没有将JSON发送到您的PHP脚本。在两个示例中(相同,顺便说一句),jQuery都将对象(不是JSON [请参见下面的注意事项])转换为查询字符串,并通过POST发送该字符串,就像普通的<form>
POST那样。
第三,您的“数组”创作。
var testobj = new Array();
testobj = {
"test1":"test1data",
"test2":"test2data",
"test3":"test3data"
};
这并没有按照您的想法做。这将创建一个新数组,然后立即将其丢弃并使用一个对象(您将
testobj
设置为一个对象,与第一个示例相同)。请注意,JavaScript中的数组仅是数字数组,没有“关联数组”。附言没有“ JSON对象”之类的东西。您不在此代码中的任何地方使用JSON。 JSON是数据的字符串表示形式,其语法与JavaScript数组/对象相似。如果不是字符串,则不是JSON。
P.P.S.不要使用
.success()
和.error()
,它们已被弃用。使用.done()
和.fail()
。参见:http://api.jquery.com/jQuery.ajax/#jqXHR关于jquery - jQuery AJAX dataType:“json”不能使用它…只需使用Array即可,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19848162/