2016-03-14 80 views
0

我想在一个网站(在那里我已经注册)来发布表单数据,以下是我的代码:AJAX调用后导致422错误

$.ajax({ 
     url:'https://api.contentstack.io/v2/content_types/the_lazy_goose/entries/', 
     type: "POST", 
     contentType: "application/json", 
     data: JSON.stringify({ 
       title: "John", 
       url: "2pm", 
       multi_line: "Random Text using Post call" 
      }), 
     headers:{ 
        access_token: 'xxxxxxxxxxx', 
        api_key: 'xxxxxxxxx' 
       }, 

     success: function() { 
      alert("success"); 
     }, 
     error: function() { 
       alert("ERROR"); 
      }, 
    }); 

这导致422(无法处理的实体) ,不知道哪里出错。 *我已经通过了http://www.restpatterns.org/HTTP_Status_Codes/422_-_Unprocessable_Entity并理解“request_entity” &“的要求语法”都很好

该网站https://contentstackdocs.built.io/rest/api/content-management-api/似乎支持JSON数据

+0

您确定'https:// exampleurl.com/goose/entries /'是允许POST动词的有效URL吗?试试这个:http://jsonplaceholder.typicode.com/ – urbz

+0

对不起,我提到的链接只是一个随机文本。我正在发布的网站允许POST,GET – iyerrama25

+0

好的,你确定那么你提到的API允许'json'作为contentType呢?也许不要指定或只是为了实验目的,'application/xml'说的是什么,statuscode ..? – urbz

回答

0

422轨时使用的参数验证失败。您可能会缺少一些必需的参数。

此外,我不认为JSON.stringify在数据是必要的。

0

因此,我浏览了他们的contentstack.js文件,并使用它们的Request方法(而不是ajax)POST数据。该架构也是错误的。所以这里是我最后使用的代码:

function Request(options, callback) { 
     HTTPRequest = XMLHttpRequest; 
     var xhr = new HTTPRequest(), 
      method = options.method || "POST", 
      url = options.url, 
      headers = options.headers; 

     // make a request 
     xhr.open(method, url, true); 

     // set headers 
     xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 
     for (var header in headers) { 
      xhr.setRequestHeader(header, headers[header]); 
     } 

     // send stringify data 
     if (options.body && method == "POST" || method == "PUT") { 
      if (typeof options.body === 'object') { 
       console.log("sending in data: options.body"); 
       xhr.send(JSON.stringify(options.body)); 
      } else { 
       xhr.send(options.body); 
      } 
     } else { 
      xhr.send(); 
     } 

     // collect response 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState === 4) { 
       var data = xhr.responseText; 
       try { 
        data = JSON.parse(data); 
       } catch (e) { 
        console.error('Could not parse the response received from the server.'); 
       } 

       if (xhr.status >= 200 && xhr.status < 300) { 
        callback(null, data); 
       } else { 
        callback(data, null); 
       } 
      } 
     }; 
    } 

    var options = { 
      url: 'https://api.contentstack.io/v2/content_types/the_lazy_goose/entries/', 
      method:'POST', 
      headers:{ 
         access_token: 'xxxxxxx', //put auth token here 
         api_key: 'xxxxxxx' 
        }, 
      body: { 
         "entry": { 
         "title": "examplexx1", 
         "url": "/example10xxx1", 
         "multi_line": "multiline...!", 
         "_comment": "example comment" 
         } 
       } 
     };