2015-12-06 4 views
0

Привет, я создал объект JSON, получающий данные из формы, и теперь я хочу, чтобы POST был в redmine API. Это то, что я сделал до сих пор.Как выполнить POST этот вывод в API

<script> 
 
// This is the creation of JSON object 
 
$.fn.serializeObject = function() 
 
{ 
 
    var o = {}; 
 
    var a = this.serializeArray(); 
 
    $.each(a, function() { 
 
     if (o[this.name] !== undefined) { 
 
      if (!o[this.name].push) { 
 
       o[this.name] = [o[this.name]]; 
 
      } 
 
      o[this.name].push(this.value || ''); 
 
     } else { 
 
      o[this.name] = this.value || ''; 
 
     } 
 
    }); 
 
    return {"project":o}; 
 
}; 
 

 
// This is the API linking and POSTING 
 

 
    $(document).ready(function(){ 
 
     $("#submit").on('click', function(){ 
 
      // send ajax 
 
      $.ajax({ 
 
       url: 'http://localhost/redmine/projects.json', // url where to submit the request 
 
       type : "post", // type of action POST || GET 
 
       dataType : 'jsonp', 
 
       headers: { 'X-Redmine-API-Key': 'admin' }, 
 
       data : JSON.stringify($('form').serializeObject()), // post data || get data 
 
       success : function(result) { 
 
        // you can see the result from the console 
 
        // tab of the developer tools 
 
        alert("Sucess"); 
 
        console.log(result); 
 
       }, 
 
       error: function(xhr, resp, text) { 
 
        console.log(xhr, resp, text); 
 
       } 
 
      }) 
 
     }); 
 
    }); 
 
</script>
<form action="" method="post"> 
 
First Name:<input type="text" name="name" maxlength="12" size="12"/> <br/> 
 
Last Name:<input type="text" name="identifier" maxlength="36" size="12"/> <br/> 
 
<!-- number:<input type="number" name="number" maxlength="36" size="12"/> <br/> --> 
 
<textarea wrap="physical" cols="20" name="description" rows="5">Enter your favorite quote!</textarea><br/> 
 
<p><input type="submit" /></p> 
 
</form>

Сообщение не работает. Объект JSON хорошо создан, Передача этого API является проблемой. Я думаю, проблема здесь,

data : JSON.stringify($('form').serializeObject()), 

Как передать созданный объект JSON выше данных. Спасибо

ответ

1

Вы не можете использовать POST и пользовательские заголовки с jsonp. Что делает jsonp для работы по разным доменам, в основном вставляет тег <script>, который вызывает обратный вызов по завершении, например.

<script src="different.domain/api/projects.json?callback=done123"></script> 

function done123 (result) { 
    // do something with result 
} 

Сервер (если он поддерживает jsonp вызов), а затем возвращает JavaScript (не JSON!), Который выглядит следующим образом:

done123({"name1":"val1","name2":{"name3":true,"name4":5}}) 

Что вызывает вашу функцию, когда сделано и работает кросс-домен потому что он использует тег script.

Если вы запустите скрипт из того же домена, что Redmine работает, измените dataType: 'jsonp' на json. В зависимости от того, как redmine ожидает отправки данных (JSON-body или form-data), вам может потребоваться изменить значение data:

// When redmine API expects JSON post body 
data : JSON.stringify($('form').serializeObject()), 

// When redmine API expects multipart POST data 
data : $('form').serializeObject() 
Смежные вопросы