2
votes

Envoi de données depuis javascript vers Laravel Controller

J'ai un problème avec l'envoi de données javascript vers mon contrôleur. Il y a mon Ajax

public function Points(Request $request) {
    $test = $request->input('data');
    return "$test";
}

Routes:

Route::get('/home', 'HomeController@index')->name('home');
Route::resource('/races','RacesController');
Route::post('updateC', 'RacesController@Points');

Et il y a my RacesController:

var point = JSON.stringify(points);

function onBtnClick() {
    $.ajaxSetup({
      header:{
        'X-CSRF-TOKEN':$('meta[name="csrf-token"]').attr('content')
      }
    });

    $.post('http://localhost/updateC', {
        data: point,
        dataType: 'json', 
        contentType:'application/json', 
    })
    .done(function() {
        alert('success');
    })
    .fail(function() {
        alert("error");
    });

}

Et l'erreur dit que cela a été bloqué par CORS-politiques.


15 commentaires

Vous devez ajouter l'en-tête x-csrf-token, consultez la documentation: laravel.com/docs/5.7 / csrf


Quelles sont les données que vous devez publier? ... ou montrer votre formulaire?


les données sont mes points que j'ai créés points [currentid] = {id: currentid, x: event.offsetX, y: event.offsetY}; currentid ++;


avez-vous ajouté dans votre page d'envoi ajax. et s'il vous plaît capture d'écran de votre console de navigateur. Demande Ajax.


J'ai essayé et je ne fonctionne toujours pas. Mais voici mon lien d'erreur


@Patrik Route :: post ('updateC', ['uses' => 'RacesController @ Points', 'as' => 'race.post']); $ .post ("{{route ('race.post')}}", { Modifiez le code ci-dessus et essayez. Si votre domaine d'accès et votre domaine d'URL ajax ne sont pas identiques, l'URL est également bloquée. Votre accès l'url est 127.0.0.1 et l'url ajax est l'hôte local. (référez-vous à votre capture d'écran)


Eh bien, j'ai fait la même recherche par moi-même et l'erreur principale est maintenant résolue. J'ai essayé votre solution maintenant et il y a cette autre erreur link . Et voici mon nouvel ajax `$ .ajax ({url:" {{route ('race.post')}} ", tapez: 'POST', data: {_token : "{{csrf_token ()}}", _method: 'PUT', points: point, dataType: 'json', contentType: 'application / json',}}) `


pourquoi vous utilisez _method: 'PUT' cela devrait être POST dans la route POST. capture d'écran d'ajax respone à partir de l'onglet réseau, cela vous aidera à comprendre l'erreur.


Quelqu'un m'a dit lors de la mise à jour de quelque chose que vous devriez utiliser la méthode PUT, alors je l'ai essayée. Il y a le lien de réponse.


Ok si vous utilisez la méthode PUT, alors dans route, vous devez également définir Route :: PUT. changez-le et essayez-le. vérifiez également le fichier journal concernant l'erreur. et l'image de réponse u téléchargée n'est que les données u envoyées au serveur. mais j'ai besoin de la réponse du serveur. où une exception d'erreur est levée.


stackoverflow.com/ questions / 10883211 /… vérifier ceci


J'ai fait quelques changements et l'erreur a disparu, mais un autre apparaît .. et c'est celui-ci lien .


envoyer une capture d'écran, par exemple. https://imgur.com/DxBOpnF


Eh bien, ce sont les captures d'écran et ça a l'air intéressant. aperçu et réponse


c'est à cause de csrf_token () si u utilisé {{csrf_token ()}} dans le fichier .js, il ne sera pas compilé et ne fonctionnera pas.


4 Réponses :


0
votes

allez dans le dossier middleware, le fichier verifycsrftoken,

protected $middleware = [
    ......
    \App\Http\Middleware\Cors::class, //added here
];

et ajoutez cette URL au tableau except

namespace App\Http\Middleware;
use Closure;
class Cors {

    public function handle($request, Closure $next) {
        $allowedOrigins = ['http://oursite.com', '*.myost.net','*','www.aminu.*'];
        $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
        if (in_array($origin, $allowedOrigins)) {
            return $next($request)
                ->header('Access-Control-Allow-Origin', $origin)
                ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
                ->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-Request-With, cache-control,postman-token, token')
                ->header('Access-Control-Allow-Credentials',' true');
        }
        return $next($request);
    }
}

pour gérer les exceptions à vos demandes de publication ajax, vous pouvez ensuite utiliser le

Barryvdh Laravel Cors a > package pour se débarrasser du problème de cors,

si vous utilisez laravel 5.6, vous n'avez besoin d'aucun package CORs pour cela,

créez simplement un middleware CORs

protected $except = [
   ....
   http://localhost/updateC
];

et ajoutez un middleware au fichier kernel.php

app/Http/Middleware/VerifyCsrfToken.php


2 commentaires

Vous pouvez spécifier dans votre route le middleware utilisé: Route :: post ('/ updateC', array ('middleware' => 'cors', 'uses' => 'RaceController @ point')); < / code>, après avoir enregistré ce middleware dans votre fichier app \ Http \ Kernel.php . Source: stackoverflow.com/questions/33076705/ …


Je l'ai enregistré et utilisé votre itinéraire et cela ne fonctionne toujours pas.



0
votes

Vous devez ajouter un jeton csrf dans votre propriété data du post ajax comme ceci:

data: {
    "_token": "{{ csrf_token() }}",
    "point": point
}


1 commentaires

Rien n'a changé toujours la même erreur.Regardez la première réponse que je l'ai liée.



0
votes
protected $except = [
   'updateC'
];

0 commentaires

0
votes

Code Ajax

var abc = 'hello world';

$.ajax({
    type: "GET",
    url: 'http://your url',
    data : { abc : abc }
    success: function (data) {

        // write your code
    },
    error: function (data) {
        // write your code
    }
});


0 commentaires