【发布时间】:2015-06-14 17:56:57
【问题描述】:
我为我的问题检查了很多答案,但没有一个对我有用。
我用在script 中找到的script 创建了一个json 对象,并且工作正常,但是当我尝试将它发送到php 时(我使用laravel 框架 ) 与$.post,对象var_dump 的returns NULL。
在Chrome Debug 的网络标签中,POST request 运行良好,但php 无法获取任何数据。
我已经在这个项目中使用了POST Ajax,除此之外没有任何问题。
如何将我的对象正确发送到 PHP?
有一个 JQuery 脚本可以获取表单值并将它们转换为 JSON 对象:
jQuery.fn.serializeObject = function() {
var arrayData, objectData;
arrayData = this.serializeArray();
objectData = {};
$.each(arrayData, function() {
var value;
if (this.value !== '') {
value = this.value;
if (objectData[this.name] != null) {
if (!objectData[this.name].push) {
objectData[this.name] = [objectData[this.name]];
}
objectData[this.name].push(value);
} else {
objectData[this.name] = value;
}
}
});
return objectData;
};
编辑 2:这是我用来解决问题的两种方法:
$('#details_form').on('submit',function(e){
e.preventDefault();
var json_enc = JSON.stringify($('#details_form').serializeObject());
$.post(
$("#details_form").prop('action'),
{ 'json_enc' : json_enc },
function(data)
{ alert(data.msg) }, 'json'); });
第二个没有 JSON 的方法:
$('#save').on('click',function(e) {
var form = $(this).closest('form') ;
e.preventDefault();
var result = form.serialize();
var ajax = $.post(
form.data('action'), {
'data': result
},
function(data) {
alert(data);
}
);
ajax.fail(function(data){
alert('fail (see console for details)') ;
console.log(data) ;
}) ;
})
第一个函数返回这个 JSON 对象:
{
"_token": "HeC6RwznFYuemIvP68pHYuET634fgQoZQCtL7ed3",
"id": "contact_1",
"name": "John",
"surname": "Wayne",
"address": "2nd street",
"contact": ["656346843", "56196856"]
}
第二个函数返回:
_token=HeC6RwznFYuemIvP68pHYuET634fgQoZQCtL7ed3&id=contact_1&name=Gino&surname=Megna&address=kjwebgflk+645&contact=656346843&contact=6548198189&contact=
使用两个 JQuery 函数,在 PHP 中返回(使用 var_dump($_POST)):
array(6) { ["_token"]=> string(40) "HeC6RwznFYuemIvP68pHYuET634fgQoZQCtL7ed3" ["id"]=> string(9) "contact_1" ["name"]=> string(4) "Gino" ["surname"]=> string(5) "Megna" ["address"]=> string(13) "kjwebgflk 645" ["contact"]=> string(0) "" }
这是我的表格:
<form method="POST" action="http://localhost/rubrica/public/contact_process" accept-charset="UTF-8" class="form-bootstrap" id="details_form" autocomplete="off">
<input name="_token" type="hidden" value="HeC6RwznFYuemIvP68pHYuET634fgQoZQCtL7ed3">
<input id="contact_id" name="id" type="hidden" value="contact_1">
<div class="bg_contact">
<div class="image_contact">
<label for="immagine" id="" class="">Add Image</label>
<input name="image" type="file" id="immagine"> </div>
<div class="rif_contact">
<div class="name_contact">
<input placeholder="Name" id="name" name="name" type="text" value="John"> </div>
<div class="surname_contact">
<input placeholder="Surname" id="surname" name="surname" type="text" value="Wayne"> </div>
</div>
</div>
<div class="address">
<div class="label_address">
<label for="address">Address</label>
</div>
<input placeholder="Address" id="address" name="address" type="text" value="2nd street"> </div>
<div class="bg_details">
<label for="contacts">Contacts</label>
<div class="content_detail">
<input type="text" name="contact" class="contact_details" placeholder="Telephone" value="656346843" id="detail_161">
<button onclick="delete_detail_exist(this,161)" id="remScnt" type="button">Remove</button>
</div>
<div class="content_detail">
<input type="text" name="contact" class="contact_details" placeholder="Telephone" value="56196856" id="detail_160">
<button onclick="delete_detail_exist(this,160)" id="remScnt" type="button">Rimuovi</button>
</div>
<div class="content_detail">
<input placeholder="Telephone" class="contact_details" id="p_scnt" name="contact" type="text">
<button id="addScnt" onclick="add_detail_field(this)" type="button">Add</button>
</div>
</div>
<input id="save" type="submit" value="Save"> </form>
PHP 方法:
public function contact_process() {
$result = trim (Input::get('result'));
$json = json_decode($result);
var_dump($json);
}
【问题讨论】:
-
看起来“Input::get('result')”返回的是GET数据,而不是POST
-
你试过 print_r($_POST);
-
@alex_kalenyuk Input::get('result') 是正确的,因为 Laravel 使用 Input::get() -> (laravel.com/docs/4.2/requests) 管理 POST 和/或 GET 请求
-
您没有阻止默认提交表单
-
提交表单时页面是否刷新?
标签: php jquery ajax json laravel-4