Ajax 调用得到 200,但我在函数调用后没有插入记录



这有点神秘,但我想我已经缩小了部分问题的范围。

基本上,我有一个表单,当我点击提交时,我正在制作一个 ajax 帖子,它命中我的路由然后是控制器,这会在其他地方调用一个执行插入的函数(通过 DB2 中的过程,但基本上是直接插入(

我的 Ajax 返回一条 200 ok 消息,并在开发工具中显示表单数据,因此该部分正常。目标是将表单值与我在控制器中硬编码的值一起获取,并将它们传递给准备语句和执行的函数。

我认为问题是来自表单的所有内容都是字符串,但我的函数期望intstring加上只有在使用正确的数据类型时才能成功插入该过程。我认为问题出在表单数据中,因为如果我做一个粗略的硬代码并在这样的测试文件中手动调用该函数,它会插入:

$id = 123;
$name1 = 'Test Name';
$number1 = 112;
$name1 = '2nd Test Name';
$number2 = 584;
$number3 = 88;
$name3 = 'Name Blue';
$category = 'Fruit';
$comment = 'Testing the comments';
$date1 = '2018-09-18';
$date2 = '2018-09-19';

所以基本上,我仍然需要传递我的表单数据,并从控制器获取它以及其他值,确保字符串作为字符串传递,INT 作为 int 传递,然后执行函数。我必须在这里错过一些非常简单的东西,但我现在 100% 迷失了。

任何帮助都非常感谢

路线.php

Route::post('insertPList', 'Controller@insertPList');

控制器.php

public function insertPList(Request $request)
{
$id = 123;
$name1 = $request->name1;
$number1 = $request->number1;
$name2 = $request->name2;
$number2 = $request->number2;
$number3 = $request->number3;
$name3 = $request->name3;
$category = 'Fruit';
$comment = $request->comment;
$date1 = '2018-09-10';
$date2 = '2018-09-11';
$service = new service();
$service->insertListRecord($id, $name1, $number1,$name2, $number2, $number3, $name3, $category, $comment, $date1, $date2);
}

服务.php

public function insertListRecord(int $id, string $name1, int $number1, string $name2, int $number2, int $number3, string $name3, string $category, string $comment, string $date1, string $date2)
{
$link = Iseries::conn();
$sql = "CALL INSERT_LIST(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$prep = odbc_prepare($link, $sql);
$exec = odbc_execute($prep, array($id, $name1, $number1, $name2, $number2, $number3, $name3, $category, $comment, $date1, $date2));

if (odbc_error())
{
echo odbc_errormsg($link);
}
}

刀片.php

$("#save").click(function(e){
e.preventDefault();
var name1 = $("input[name=name1]").val();
var number1 = $("input[name=number1]").val();
var name2 = $("input[name=name2]").val();
var number2 = $("input[name=number2]").val();
var number3 = $("input[name=number3]").val();
var name3 = $("input[name=name3]").val();
var comment = $("textarea[name=comment]").val();
$.ajax({
url:'URL',
data:{
name1:name1,
number1:number1,
name2:name2,
number2:number2,
number3:number3,
name3:name3,
comment:comment
},
"_token": "{{ csrf_token() }}",
type:"POST",
success:function(data){
console.log(data);
},
error: function(jqxhr, status, exception) {
alert('Exception:', exception);
}
});
});

根据你的解释,如果你遇到的问题是类型格式问题(字符串、整数、布尔值(,并且你使用的是 laravel框架,那么在你的模型中添加一些这样的东西。

/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
'number1' => 'integer',
'name1' => 'string',
'column name' => 'expected or required format of data',
]; 

希望这应该在插入数据库之前将数据转换为所需的格式。参见

最新更新