2016-07-09 16 views
-1

Ich erwarte das folgende Stück Code, um den Ajax-Aufruf auszuführen. Allerdings sehe ich einen 405 Fehler, die

The requested resource does not support http method 'GET'.

sagt Wenn ich Typ verwenden = 'json' ich

The requested resource does not support http method 'JSON'.

Hier ist der relevante Teil meines Content-Skript-Code

$(document).ready(function() { 
      var imgSrcArr = []; 
      $('img').each(function(e) { 
       var s = this.src; 
       imgSrcArr.push(s); 

       $.ajaxSetup({cache: false}); 

       var formData = new FormData(); 
       formData.append("apikey", "xxxxxxxxxxxxxxx"); 
       formData.append("isOverlayRequired", false); 
       formData.append("url", s);    
       //console.log(formData); 

       //console.log($.support.cors); 
       $.ajax({ 
        url: "https://api.ocr.space/parse/image", 
        data: {apikey: "xxxxxxxxxxxxxxx", url: s}, 
        //method: 'GET', 
        dataType: 'json', 
        async: false, 
        cache: false, 
        contentType: "application/json; charset=utf-8", 
        processData: false, 
        type: 'GET', 
        crossDomain: true, 
        xhrFields: { 
         // The 'xhrFields' property sets additional fields on the XMLHttpRequest. 
         // This can be used to set the 'withCredentials' property. 
         // Set the value to 'true' if you'd like to pass cookies to the server. 
         // If this is enabled, your server must respond with the header 
         // 'Access-Control-Allow-Credentials: true'. 
         withCredentials: true 
        }, 
        headers: { 
         // Set any custom headers here. 
         // If you set any non-simple headers, your server must include these 
         // headers in the 'Access-Control-Allow-Headers' response header. 
        }, 
        success: function(ocrParsedResult, textStatus, jqXHR) { 
         //Get the parsed results, exit code and error message and details 
         var parsedResults = ocrParsedResult["ParsedResults"]; 
         var ocrExitCode = ocrParsedResult["OCRExitCode"]; 
         var isErroredOnProcessing = ocrParsedResult["IsErroredOnProcessing"]; 
         var errorMessage = ocrParsedResult["ErrorMessage"]; 
         var errorDetails = ocrParsedResult["ErrorDetails"]; 

         var processingTimeInMilliseconds = ocrParsedResult["ProcessingTimeInMilliseconds"]; 

         //If we have got parsed results, then loop over the results to do something 
         if (parsedResults!= null) { 
          //Loop through the parsed results 
          $.each(parsedResults, function (index, value) { 
           var exitCode = value["FileParseExitCode"]; 
           var parsedText = value["ParsedText"]; 
           var errorMessage = value["ParsedTextFileName"]; 
           var errorDetails = value["ErrorDetails"]; 

           var textOverlay = value["TextOverlay"]; 

           var pageText = ''; 
           switch (+exitCode) { 
            case 1: 
             pageText = parsedText; 
             break; 
            case 0: 
            case -10: 
            case -20: 
            case -30: 
            case -99: 
            default: 
             pageText += "Error: " + errorMessage; 
             break; 
           } 

           console.log(parsedText); 


           var bazExtract = extractEmails1(parsedText); 
           if(bazExtract !== null) { 
            extractEmails2(bazExtract); 
           } 
          }); 
         } 
        }, 
        error: function(err) { 
         console.log(err); 
        } 
       }); 
      }); 
      //console.log(imgSrcArr); 
     }); 

Ein Hinweis: Andere Abschnitte des Inhaltsskriptcodes werden wie erwartet ausgeführt, aber es gibt keine Serverantwort (in der Entwicklerkonsole) an die Ajax-Anfrage.

Wenn dies ein CORS-Problem ist, gibt es eine Problemumgehung für diese Art von Fehler? Ich habe eine Handvoll Antworten auf ähnliche Fragen zu SO versucht, aber ich bin nicht in der Lage, mit solchen weiterzumachen.

+0

Mögliches Duplikat von [jQuery .ajax() POST Request löst 405 (Method Not Allowed) auf RESTful WCF] (http://stackoverflow.com/questions/17333013/jquery-ajax-post- request-throws-405-method-not-allowed-on-restful-wcf) –

+0

Sie können kein Objekt als 'data:' Parameter verwenden, wenn Sie 'contentType:" application/json "' und 'processData: false verwenden '. Die Option 'processData' sagt, dass das Objekt nicht in eine Zeichenkette konvertiert werden soll und' $ .ajax' nicht weiß, wie man JSON sendet. – Barmar

+0

Sie sollten 'processData: false' nur verwenden, wenn Sie' data: formData' verwenden. Und dann sollten Sie 'contentType: 'multipart/form-data' verwenden. – Barmar

Antwort

1

Der Titel "Post Parameter" in der documentation der API schlägt vor, dass Sie einen POST, nicht ein GET tun sollten. Verwenden Sie also: type: POST

+0

Und loswerden der 'contentType' und' processData' Optionen auch. – Barmar

+0

@Barmar Wenn ich 'contentType' und' processData' entferne, wobei 'type' auf 'POST' steht, erhalte ich' jQuery.Deversed exception: Illegaler Aufruf TypeError: Illegal invocation', der auf '$ verweist.ajax' line und '$ ('img')' line. FYI Ich habe '$ ('img')' in '$ ('img [src * =" mail "]') geändert, und das sollte meinen vorhandenen Code nicht beeinträchtigen, oder? –

+0

@SunandoSamaddar Was haben Sie als "Daten" -Option, wenn Sie das tun? Dein Kommentar oben sagt, dass du zu 'data: formData' gewechselt hast, und in diesem Fall brauchst du' processData: false'. – Barmar