Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel4中的简单ajax_Ajax_Laravel 4 - Fatal编程技术网

Laravel4中的简单ajax

Laravel4中的简单ajax,ajax,laravel-4,Ajax,Laravel 4,我有以下代码 ajax //ajax edit button $('.edit_button').on('click', function(e) { e.preventDefault(); var id_produk = $(this).attr('id'); $.ajax({ type : "POST", url : "editproduk", data : id_produk, dataType: '

我有以下代码

ajax

 //ajax edit button
 $('.edit_button').on('click', function(e) {
    e.preventDefault();
    var id_produk = $(this).attr('id');
    $.ajax({
        type : "POST",
        url : "editproduk",
        data : id_produk,
        dataType: 'JSON',
        success : function(data) {
           alert('Success');
           console.log(data);
        },
        error: alert('Errors')
    });
});
我总是收到messagebox错误
不知道我在哪里失踪,
因为在chrome-inspect-element-console中没有给出任何线索

我的路线

Route::post('/account/editproduk', array(
    'as' => 'edit-produk-post',
    'uses' => 'AccountController@postEditProduk'
));
我的控制器

public function postEditProduk() {
    if (Request::ajax()) {
        return "test test";
    }
}

扩展问题
在使用
return Response::json()
之后,我很好地运行了脚本,如下所示

$id_produk = Input::get('id_produk');
$produk = Produk::findOrFail($id_produk);
return Response::json($produk);
并通过此脚本在视图中访问它

success : function(data) {
    alert('Success');
    console.log(data["name-produk"]);
}
但是如果我想返回类似于json的数组

$id_produk = Input::get('id_produk');
$produk = Produk::findOrFail($id_produk);
$spesifikasi = SpesifikasiProduk::where('id_produk', '=', $id_produk);
return Response::json(array($produk, $spesifikasi));
我无法在这样的视图中访问它

success : function(data1, data2) {
    alert('Success');
    console.log(data1["name-produk"] - data2["title-spek"]);
}
如何访问json数组


扩展问题更新

Route::post('/account/editproduk', array(
    'as' => 'edit-produk-post',
    'uses' => 'AccountController@postEditProduk'
));
如果我错了,请更正我的脚本 因为我对解释有点困惑

这是退货的正确方法吗

Response::json(array('myproduk' => 'Sproduk', 'data2' => 'testData2'));
结果

console.log(produk["myproduk"]);
--------------------------------
Object {id_produk: 1, nama_produk: "produk1", deskripsi: "desc_produk" 


console.log(produk["data2"]);
--------------------------------
testData2

我仍然不知道如何在控制器中打印
my_produk
array

中的
nama_produk
,在ajax请求等待json数据时返回文本,看看这些代码行,我想你应该会得到答案:

if(Request::ajax()) {
        $province = Input::get('selectedProvince');
        //Get all cites for a province
        if ($cityList = City::where('province_id','=', $province)) {
            return Response::make($cityList->get(['id', 'name']));
        }
        return Response::json(array('success' => false), 400);
    }

问题1:

为什么这段代码不发送JSON数据回来

public function postEditProduk() {
    if (Request::ajax()) {
        return "test test";
    }
}
回答:,因为这不是返回JSON数据的正确方法。 从Laravel 4文档中,将JSON数据发送回链接。因此,正确的代码为:

public function postEditProduk() {
    if (Request::ajax()) {
        return Response::json("test test");
    }
}
问题2: 为什么我无法访问
data1
data2

success : function(data1, data2) {
    alert('Success');
    console.log(data1["name-produk"] - data2["title-spek"]);
}
回答:,因为这不是捕获JSON数据的正确方法。正确的发送方式在中给出

正如您所看到的,
json
方法将
string
array
作为第一个参数。因此,您需要发送第一个参数本身中的所有数据(您正在这样做)。由于只传递了一个参数,因此在javascript中只需要捕获一个参数。您正在捕获2个参数

根据
$produk
$spesifikasi
是什么,您的数据将显示在一个数组中。假设
$produk
是一个字符串,
$spesifikasi
是一个数组。然后javascript端的数据将如下所示:

[
    [0] => 'value of $produk',
    [1] => array [
        [0] => 'value1',
        [1] => 'value2'
    ]
]
最好是打印日志,记录所有数据并了解其结构。将代码更改为:

success : function(data) {
    console.log(data.toString());
}
这将打印您的整个数据,然后您可以查看数据的结构并相应地访问它。如果您需要在控制台上打印数据的帮助,请用谷歌搜索,或者直接告诉我

我真诚地希望我已经清楚地解释了你的疑问。祝你今天愉快

编辑 扩展问题答案: 替换此行:

$spesifikasi = SpesifikasiProduk::where('id_produk', '=', $id_produk);
为此:

$spesifikasi = SpesifikasiProduk::where('id_produk', '=', $id_produk)->get();
如果不调用
get()
方法,laravel将不会返回任何值

然后以如下方式访问javascript中的数据:

console.log(JSON.stringify(data));
通过这种方式,您将了解数据的结构,并可以通过以下方式访问数据:

data[0]["some_key"]["some_other_key"];

我在laravel 5中,所以这可能对您不起作用,但我使用
return-response::JSON(array('successMessage'=>'Success','payload'=>$response)),发送JSON响应。您还可以将日志放在控制器中,这样我们就可以确定这是客户端的问题,而不是服务器端的问题。另外,如果您的按钮
.edit\u按钮
正在提交某些表单,您可能需要在发送ajax请求之前执行
e.preventDefault()
函数。执行上述步骤,并让我知道Werelarvel随日志外观提供的结果。查看config文件夹中的app.php。必须有一个名为Log的外观。在顶部的控制器中写入
使用light\Support\Facades\Log
,在任何需要记录的地方只需写入
Log::error(“某些日志”)这是在laravel 5中。不知道4,但会检查是否找不到它。另外,您之前提到,当您执行我的代码时,会出现500个错误。你能说明原因吗?可能您忘记定义
$response
,因此出现了错误。检查我的答案。希望你喜欢。如果还有其他事情,请告诉我。:)让我们看看我的扩展问题等一下…有点困惑我会更新我的问题