最初我试图将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'以外的任何其他内容。返回'成功',但仍然没有数据发送。
我可以使用完全相同的对象代码作为'数据:'值,它会被发送,但不是在我使用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)我将变量定义为数组而不是JSON对象,(b)我删除了' dataType'来自.ajax调用的属性。
使用$ _POST数组抓取目标页面上的Array元素。
无论如何,我从不关心JSON作为传递数据的方法,所以这并不是让我担心。但我确实想知道jQuery的当前状态(v.1.9.1)
我的JSON构造有问题吗?通过jQuery AJAX发送JSON对象的处理是什么?为什么数据类型存在问题:" json"'属性?
答案 0 :(得分:4)
这里首先要意识到dataType
参数实际上是什么。它用于告诉jQuery您希望从服务器接收的内容。你收到一个错误,因为你告诉jQuery期待JSON,但那并不是你给它的东西。它试图解析它并失败。 数据被发送到服务器。
其次,您不将JSON发送到您的PHP脚本。在两个示例中(相同的,顺便说一下),jQuery将对象(不是JSON [见下面的注释])转换为查询字符串并通过POST发送,就像普通的<form>
POST一样。
第三,你的“阵列”创作。
var testobj = new Array();
testobj = {
"test1":"test1data",
"test2":"test2data",
"test3":"test3data"
};
这不符合你的想法。这将创建一个新数组,然后立即抛出它并使用一个对象(您将testobj
设置为一个对象,与第一个示例相同)。请注意,JavaScript中的数组仅为数字,不具有“关联数组”。
P.S。没有“JSON对象”之类的东西。您没有在此代码中的任何位置使用JSON。 JSON是数据的字符串表示,其语法与JavaScript数组/对象类似。如果它不是字符串,则不是JSON。
P.P.S。不要使用.success()
和.error()
,不推荐使用它们。使用.done()
和.fail()
。请参阅:http://api.jquery.com/jQuery.ajax/#jqXHR