我有以下代码:
var arr = {City:'Moscow', Age:25};
$.ajax({
url: "<? echo $this->createUrl('cities/index');?>",
type: "POST",
data: JSON.stringify(arr),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function(data){
alert(data);
}
});
结果是null
。在PHP方面,我有:
echo json_encode($_POST);
和
print_r($_POST);
但两者都给出了空洞的结果(也检查了Firebug)。
答案 0 :(得分:3)
您还可以在Ajax中设置dataType
以指定内容类型,如下所示。
var city='city name';
var age=10;
$.ajax({
url: "<? echo $this->createUrl('cities/index');?>",
type: "POST",
data:"City="+city+"&Age="+age,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function(data){
alert(data);
}
});
并在cities/index.php
中,您可以按照以下方式获取此数据
if($_POST){
$city=$_POST['City'];
$age=$_POST['Age'];
// and do with $city and $age what you want.
//for return anything thing to `json` use follows we pass $age back to ajax
echo json_encode($age);
}
答案 1 :(得分:1)
传递给data
的{{1}}选项必须是一个简单的对象,jQuery将转换为格式为$.ajax()
的字符串,或者它应该是{{1}形式的字符串1}}。
在你的情况下,它可以通过传递对象本身并让jQuery执行查询字符串格式化来解决:
key1=value1&key2=value2..
答案 2 :(得分:1)
我猜您不需要对数据进行字符串化,因为数据应该是PlainObject或String,但在您的情况下,您可以简单地编写如下所示
var arr = {City:'Moscow', Age:25};
$.ajax({
url: "<? echo $this->createUrl('cities/index');?>",
type: "POST",
data: arr,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function(data){
alert(data);
}
});
如jquery官方网站https://api.jquery.com/jQuery.ajax/
中所述数据
键入:PlainObject或String
要发送到服务器的数据。它被转换为查询字符串if 还不是一个字符串。它附加到GET请求的URL。看到 processData选项可防止此自动处理。对象必须 是键/值对。如果value是一个数组,jQuery序列化多个 具有相同键的值基于传统设置的值 (如下所述)。
答案 3 :(得分:0)
试试这个
var arr = {City:'Moscow', Age:25};
$.ajax({
url: "<? echo $this->createUrl('cities/index');?>",
type: "POST",
data: arr,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function(data){
alert(data);
}
});