gpt4 book ai didi

javascript - 返回到 ajaxrequest 的 PHP 对象有 boolean == true 而不是 data

转载 作者:行者123 更新时间:2023-11-28 14:37:03 24 4
gpt4 key购买 nike

我正在尝试使用 laravel、php 和 jquery ajax 创建动态 View 。当点击导航栏按钮时,它将向 Controller 发送一个 ajax 请求, Controller 将验证发送的 id、获取数据并以 html 格式返回。

因为可能会发送回多个值,这些值需要它们自己的 html div。所以我用一个对象尝试过这个。

buttonclicked => ajax请求 Controller =>获取数据=>用html格式化数据=>将其放入对象=>返回对象到ajax请求成功:。

我现在遇到的问题是该对象确实返回,但不是 html 格式的数据,而是一个 bool 值设置为 true,如 firebug 中所示。

我对 Ajax 和 Jquery 还很陌生,如果这个问题以前被问过很多次,我很抱歉。

Ajax :

function onclickNavbar(id) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url:'/controller/AjaxController',
type: "POST",
dataType: "json",
beforeSend: function (xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
data: {identifier: id},
success: function(data){
var $Htmlselector = $("#contenthtml");
console.log('succes');
jQuery.each(data.html, function(key, value){
console.log(key + ' : ' + value);
$($Htmlselector).html(value);
});

},
error: function(data){
console.log('Error something went wrong. See response output:');
console.log(data);
}
});
}

Controller :

public function processor(){
if(isset($_POST['identifier'])){
$id = $_POST['identifier'];
$db = new DatabaseController();

$diensten = $db->GetAllDiensten()->where('parentcategory_id', '=', $id);
$htmlObject = array();
$counter = 0;
foreach($diensten as $dienst){
$htmlObject[$counter++] = "
<div class='col-xs-2half card-column'>
<div class='article-list header-card'>
<a href='/dienst/" . $dienst->shortname . "'>
<img src=" . asset( 'assets/img' . $dienst->image ) . "/>
</a>
</div>
<div class=".'article-list'." class=".'body-card'.">
<hr class=".'hr-card'." >
@if(" . strlen($dienst->name) <= 20 . ")
<h3 class='name text-card'>" . $dienst->name . "</h3>
@else
<h3 class='name text-card'>" . $dienst->name . "</h3>
@endif
<hr>
<p class='description idtagA text-card'>" . $dienst->shortdesc . "</p>
</div>
<div class='article-list footer-card'>
<a href='/dienst/". $dienst->shortname ."'>
<button class='btn btn-danger btn-card' type='button' style='padding-bottom:10px;'>
<span>". $dienst->shortname ."</span>
</button>
</a>
</div>
</div>";
}
$htmlObject = json_encode((object)$htmlObject);
return response()->json(['html'=> $htmlObject]);
//return json_encode($html, true);

}else{
return 'Value Identifier not set!';
}
}

注意:我使用的是 Laravel 5.6.3,@if @foreach 等是blade 的语法。

更新:##根据@SmitRaval的代码出错

{"html":[true]}Array{
"message": "Array to string conversion",
"exception": "ErrorException",
"file": "C:\\xampp\\htdocs\\Development Entric\\Entric_website\\app\\Http\\Controllers\\AJAXController.php",
"line": 49,
"trace": [
{
"file": "C:\\xampp\\htdocs\\Development Entric\\Entric_website\\app\\Http\\Controllers\\AJAXController.php",
"line": 49,
"function": "handleError",
"class": "Illuminate\\Foundation\\Bootstrap\\HandleExceptions",
"type": "->"
},
{
"function": "processor",
"class": "App\\Http\\Controllers\\AJAXController",
"type": "->"
},
{
.... It goes on for a while...

更新2:

现在有更多这样的函数,因此当某些查询更频繁地与 ->where 或 ->find 一起使用时,我可以使用不同的参数扩展这些函数。迪恩斯坦 Controller :

use App\diensten; // This is the model.
class DatabaseController extends Controller
{

function GetAllDiensten(){
return $diensten = diensten::all();
}

最佳答案

为什么要对 json 进行两次编码?

$htmlObject = json_encode((object)$htmlObject);
return response()->json(['html'=> $htmlObject]);

可以直接使用

return response()->json(['html'=> (object)$htmlObject]);

请在您的代码中尝试此操作。

编辑

ajax 调用从服务器读取响应,并且该响应必须呈现为某种类型的可读数据,例如 application/jsontext/html

为了写入该数据,您需要使用 PHP 从服务器回显它。

return 语句不写入数据,它只是在服务器级别返回。

试试这个

echo json_encode(['html'=> (object)$htmlObject]);
die;

更新

foreach($diensten as $dienst){
$htmlObject[] = "
<div class='col-xs-2half card-column'>
<div class='article-list header-card'>
<a href='/dienst/" . $dienst->shortname . "'>
<img src=" . asset( 'assets/img' . $dienst->image ) . "/>
</a>
</div>
<div class=".'article-list'." class=".'body-card'.">
<hr class=".'hr-card'." >
@if(" . strlen($dienst->name) <= 20 . ")
<h3 class='name text-card'>" . $dienst->name . "</h3>
@else
<h3 class='name text-card'>" . $dienst->name . "</h3>
@endif
<hr>
<p class='description idtagA text-card'>" . $dienst->shortdesc . "</p>
</div>
<div class='article-list footer-card'>
<a href='/dienst/". $dienst->shortname ."'>
<button class='btn btn-danger btn-card' type='button' style='padding-bottom:10px;'>
<span>". $dienst->shortname ."</span>
</button>
</a>
</div>
</div>";
}

无需提供 key $counter++,您只需使用$htmlObject[]

更新2

您并没有真正从数据库获取数据。

$diensten = $db->GetAllDiensten()->where('parentcategory_id', '=', $id)->get();

使用get()获取行并存储在$diensten

更新3

 $diensten = diensten::where('parentcategory_id', '=', $id)->get();

在 Controller 中添加 App/diensten 并直接使用模型。它应该会给你想要的结果。

关于javascript - 返回到 ajaxrequest 的 PHP 对象有 boolean == true 而不是 data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49534100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com