2017-03-01 1 views
1

Es gibt Seite mit url mysite/dashboard mit den Listen der PfostenLraravel die gleiche AJAX-Anforderung aus der Liste der Pfosten senden und von einem Beitrag

Route

Route::get('dashboard', '[email protected]'); 

Methode

public function index() { 
    $posts = Post::latest('published_at')->unpublished()->paginate(20); 
    return view('dashboard.index', compact('posts')); 
} 

Jeder Beitrag in der Liste hat Schaltfläche Veröffentlichen

Weg für Verfahren

Route::post('publish', '[email protected]'); 

js Skript

$(document).on('click', '.btn-publish-post', function(){ 
var $btn = $(this); 
var post_id = $(this).closest('.post').data('post-id'); 

$btn.prop('disabled', true); 
$.ajax({ 
    type: 'post', 
    url: 'publish', 
    data: {'id' : post_id}, 
    dataType: 'json',     
    success: function(response){ 
     if(response.success) { 
      $btn.closest('.post').remove(); 
     } 
     if(response.fail) { 

     } 
     $btn.prop('disabled', false); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log(JSON.stringify(jqXHR)); 
     console.log("AJAX error: " + textStatus + ' : ' + errorThrown); 
     $btn.prop('disabled', false); 
    } 
}); 
}); 

Methode in PostsController

public function publish(Request $request) 
    { 
     $id = $request->get('id'); 
     $published = Post::where('id', $id) 
      ->update(['is_published' => 1]); 
     if ($published) { 
      return Response::json(array(
       'success' => true 
      )); 
     } 
     return Response::json(array(
      'fail' => true 
     )); 
    } 

Für jeden Eintrag in der Liste aller Code funktioniert gut.

Aber auch ich kann öffnen jeden Beitrag

Route

Route::get('dashboard/posts/{id}', '[email protected]'); 

Methode in DashboardController

public function show($id) { 
    $post = Post::findOrFail($id); 
    return view('dashboard.show', compact('post')); 
} 

und die Post hat auch Schaltfläche Veröffentlichen, aber für einen Beitrag js Code funktioniert nicht becase versucht AJAX-Anfrage an URL mysite/dashboard/posts/publish zu senden (nicht mysite/publish) a Und natürlich scheitert es. Wie funktioniert mein Code für die Liste der Posts und für einen Post?

Antwort

1

Wenn das Problem ist, dass die AJAX-Anforderung die Anforderung an mysite/publish nicht sendet, dann ist die einfache Lösung ist die folgende URL in Bezug auf die Site-Stamm zu verwenden: /publish

Also, man muss nur url: 'publish', ändern url: '/publish',

+0

oh, so einfach ... großer Dank! – Heidel

+0

Froh, dass es geholfen hat, Prost! – Paras

Verwandte Themen