如何使用类型:在jsonp ajax调用中"POST"

Man*_*ngh 52 jquery jsonp http-post

我正在使用JQuery ajax jsonp.我有以下JQuery代码:

 $.ajax({  
        type:"GET",        
        url: "Login.aspx",  // Send the login info to this page
        data: str, 
        dataType: "jsonp", 
        timeout: 200000,
        jsonp:"skywardDetails",
        success: function(result)
        { 
             // Show 'Submit' Button
            $('#loginButton').show();

            // Hide Gif Spinning Rotator
            $('#ajaxloading').hide();  
         } 

    });  
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,我只想将请求发送为"POST"而不是"GET",请建议我如何实现这一点.

谢谢

Nic*_*ver 82

你不能使用JSONP进行POST ...它只是不起作用,它创建一个<script>元素来获取数据......这必须是一个GET请求.除了作为代理发布到您自己的域之外,您可以做的事情并不多,但是用户不能直接执行此操作并查看响应.

  • 通过SSL的GET请求在传输过程中不如POST的安全性更低.URL信息(如路径,查询字符串等)都作为HTTP请求的一部分进行加密.您的查询字符串不能在数据包级别被"嗅探".然而,还有其他问题,如[这个问题]的答案所述(http://stackoverflow.com/questions/323200/is-a-https-query-string-secure) (4认同)

Pra*_*ani 36

使用jsondataType发送这样的:

    $.ajax({
        url: "your url which return json",
        type: "POST",
        crossDomain: true,
        data: data,
        dataType: "json",
        success:function(result){
            alert(JSON.stringify(result));
        },
        error:function(xhr,status,error){
            alert(status);
        }
    });
Run Code Online (Sandbox Code Playgroud)

并将这些行放在您的服务器端文件中:

如果是PHP:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Max-Age: 1000');
Run Code Online (Sandbox Code Playgroud)

如果java:

response.addHeader( "Access-Control-Allow-Origin", "*" ); 
response.addHeader( "Access-Control-Allow-Methods", "POST" ); 
response.addHeader( "Access-Control-Max-Age", "1000" );
Run Code Online (Sandbox Code Playgroud)

  • 是否有任何潜在的安全隐患(例如CSRF)允许任何第三方网站通过这些响应标头设置启动对您网站的应用程序的AJAX调用? (2认同)
  • 请注意,jsonp的部分内容是能够让浏览器发送cookie.这里的代码不会实现这一点.为此,您可能需要根据此文档打开凭据:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials (2认同)

Tgr*_*Tgr 7

现代浏览器允许跨域AJAX查询,它被称为跨源资源共享(参见本文档以获得更简短和更实用的介绍),最新版本的jQuery支持开箱即用; 你需要一个相对较新的浏览器版本(FF3.5 +,IE8 +,Safari 4 +,Chrome4 +;没有Opera支持AFAIK).

  • 实际上我会更加挑剔,并说JSONP不是XMLHttpRequest,但它是AJAX.无论如何,AJAX定义不明确,因为它不会严格地涵盖获取JSON而不是XML或同步获取.因此,考虑到AJAX的使用范围比它已经定义的更广泛,加上JSONP主要用于异步Javascript,我很高兴说AJAX也涵盖了JSNOP. (5认同)