sql >> Database teknologi >  >> RDS >> Mysql

Vil du annullere afventende AJAX-anmodninger i PHP-appen?

Sandsynlig årsagskæde

  1. serveren er ikke klar over, at XHR-anmodningerne er annulleret, og derfor kører de tilsvarende PHP-processer
  2. disse PHP-processer bruger sessioner og forhindrer samtidig adgang til denne session, indtil de afsluttes

Mulige løsninger

Adressering af et af de to ovenstående punkter bryder kæden og kan løse problemet:

  1. (a) ignore_user_abort er FALSK som standard, men du bruger muligvis en ikke-standardindstilling. Skift denne indstilling tilbage til FALSK i dig php.ini eller ring til ignore_user_abort(false) i de scripts, der håndterer disse afbrydelige anmodninger.

Ulempe:scriptet afsluttes bare. Ethvert igangværende arbejde droppes, hvilket muligvis efterlader systemet i en snavset tilstand.

  1. (b) Som standard vil PHP ikke registrere, at brugeren har afbrudt forbindelsen, før der er gjort et forsøg på at sende information til klienten. Udfør echo noget med jævne mellemrum i løbet af dit langvarige script.

Ulempe:disse dummy-data kan ødelægge det normale output af dit script. Og også her kan scriptet efterlade systemet i en beskidt tilstand.

  1. En PHP-session er gemt som en fil på serveren. På session_start() , åbner scriptet sessionsfilen i skrivetilstand og opnår effektivt en eksklusiv lås på den. Efterfølgende anmodninger, der bruger den samme session, sættes i bero, indtil låsen udløses. Dette sker, når scriptet afsluttes, medmindre du eksplicit lukker sessionen. Ring til session_write_close() eller session_abort() så tidligt som muligt.

Ulempe:når den er lukket, kan sessionen ikke længere skrives (medmindre du genåbner sessionen , men dette er noget uelegant et hack). Også scriptet bliver ved med at køre, hvilket muligvis spilder ressourcer.

Jeg anbefaler klart den sidste mulighed.



  1. PostgreSQL array_agg rækkefølge

  2. Hvordan kan jeg implementere et .NET-program, der bruger ODAC uden at installere hele komponenten til brugeren?

  3. MySQL - Problemer med at oprette brugerdefineret funktion (UDF)

  4. Sådan fungerer TRIM_ORACLE() i MariaDB