jQuery $.ajax(), $.post sending “OPTIONS” as REQUEST_METHOD in Firefox

前端 未结 23 2554
傲寒
傲寒 2020-11-22 14:38

Having trouble with what I thought was a relatively simple jQuery plugin...

The plugin should fetch data from a php script via ajax to add options to a

相关标签:
23条回答
  • 2020-11-22 15:25

    I used the following code on Django side to interpret the OPTIONS request and to set the required Access-Control headers. After this my cross domain requests from Firefox started working. As said before, the browser first sends the OPTIONS request and then immediately after that the POST/GET

    def send_data(request):
        if request.method == "OPTIONS": 
            response = HttpResponse()
            response['Access-Control-Allow-Origin'] = '*'
            response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
            response['Access-Control-Max-Age'] = 1000
            # note that '*' is not valid for Access-Control-Allow-Headers
            response['Access-Control-Allow-Headers'] = 'origin, x-csrftoken, content-type, accept'
            return response
        if request.method == "POST":
            # ... 
    

    Edit: it seems to be that at least in some cases you also need to add the same Access-Control headers to the actual response. This can be a little bit confusing, since the request seems to succeed, but Firefox does not pass the contents of the response to the Javascript.

    0 讨论(0)
  • 2020-11-22 15:28

    Another possibility to circumvent the problem is to use a proxy script. That method is described for example here

    0 讨论(0)
  • 2020-11-22 15:28

    Try adding the option:

    dataType: "json"

    0 讨论(0)
  • 2020-11-22 15:29

    I seems that if o.url = 'index.php' and this file exists is ok and returning a success message in the console. It returns an error if I use url:http://www.google.com

    If doing a post request why not using directly the $.post method:

    $.post("test.php", { func: "getNameAndTime" },
        function(data){
            alert(data.name); // John
            console.log(data.time); //  2pm
        }, "json");
    

    It is so much simpler.

    0 讨论(0)
  • 2020-11-22 15:29
     function test_success(page,name,id,divname,str)
    { 
     var dropdownIndex = document.getElementById(name).selectedIndex;
     var dropdownValue = document.getElementById(name)[dropdownIndex].value;
     var params='&'+id+'='+dropdownValue+'&'+str;
     //makerequest_sp(url, params, divid1);
    
     $.ajax({
        url: page,
        type: "post",
        data: params,
        // callback handler that will be called on success
        success: function(response, textStatus, jqXHR){
            // log a message to the console
            document.getElementById(divname).innerHTML = response;
    
            var retname = 'n_district';
            var dropdownIndex = document.getElementById(retname).selectedIndex;
            var dropdownValue = document.getElementById(retname)[dropdownIndex].value;
            if(dropdownValue >0)
            {
                //alert(dropdownValue);
                document.getElementById('inputname').value = dropdownValue;
            }
            else
            {
                document.getElementById('inputname').value = "00";
            }
            return;
            url2=page2; 
            var params2 = parrams2+'&';
            makerequest_sp(url2, params2, divid2);
    
         }
    });         
    }
    
    0 讨论(0)
  • 2020-11-22 15:30

    We had a problem like this with ASP.Net. Our IIS was returning an Internal Server Error when trying to execute a jQuery $.post to get some html content due to PageHandlerFactory was restricted to respond only GET,HEAD,POST,DEBUG Verbs. So you can change that restriction adding the verb "OPTIONS" to the list or selecting "All Verbs"

    You can modify that in your IIS Manager, selecting your website, then selecting Handler Mappings, double click in your PageHandlerFactory for *.apx files as you need (We use Integrated application pool with framework 4.0). Click on Request Restrictions, then go to Verbs Tabn and apply your modification.

    Now our $.post request is working as expected :)

    0 讨论(0)
提交回复
热议问题