#javascript #jquery #ios #api #cordova
#javascript #jquery #iOS #API #кордова
Вопрос:
Используя PhoneGap для создания приложения для iOS, я делаю что-то действительно простое (отправляя ajax-запрос к удаленному API). Во время тестирования на моем физическом устройстве (iPhone 4) Все работает нормально, когда я делаю запрос при использовании Wi-Fi, но когда я делаю свои запросы через тарифный план AT amp; T, я получаю ответ 502 bad gateway (ниже). Я чувствую, что это относится к классу подключения PhoneGap, но я могу ошибаться… Я знаю, что мой сервер правильно принимает запрос, поскольку он создает экземпляр в моей базе данных при любом подключении к данным, просто ответ задерживается при работе с данными AT amp; T.
Вот моя распечатка моего AJAX и параметра ошибки
$.ajax(
{
url : 'http://remotehost.com/api/users/login',
type : 'POST',
dataType : 'json',
data : $('#user_login').serializeArray(),
success : function(result)
{
}
});
2011-10-10 00:05:12.983 Emoome[481:707] [INFO] Object:
readyState = 4
setRequestHeader = function (a, b) {t===0amp;amp;(l[a.toLowerCase()]=b);return this;}
getAllResponseHeaders = function () {return t===2?m:null;}
getResponseHeader = function (a) {var b;if(t===2){if(!n){n={};while(b=bs.exec(m))n[b[1].toLowerCase()]=b[2]}b=n[a.toLowerCase()]}return b||null;}
abort = function (a) {a=a||"abort",oamp;amp;o.abort(a),w(0,a);return this;}
promise = function (a, c) {if(a==null){if(e)return e;e=a={}}c=z.length;while(c--)a[z[c]]=b[z[c]];return a;}
isRejected = function () {return c||b;}
isResolved = function () {return c||b;}
fail = function () {if(!e){var c=arguments,g,h,i,j,k;bamp;amp;(k=b,b=0);for(g=0,h=c.length;g<h;g )i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"amp;amp;a.push(i);kamp;amp;f.resolveWith(k[0],k[1])}return this;}
done = function () {if(!e){var c=arguments,g,h,i,j,k;bamp;amp;(k=b,b=0);for(g=0,h=c.length;g<h;g )i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"amp;amp;a.push(i);kamp;amp;f.resolveWith(k[0],k[1])}return this;}
then = function (a, c) {b.done(a).fail(c);return this;}
success = function () {if(!e){var c=arguments,g,h,i,j,k;bamp;amp;(k=b,b=0);for(g=0,h=c.length;g<h;g )i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"amp;amp;a.push(i);kamp;amp;f.resolveWith(k[0],k[1])}return this;}
error = function () {if(!e){var c=arguments,g,h,i,j,k;bamp;amp;(k=b,b=0);for(g=0,h=c.length;g<h;g )i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"amp;amp;a.push(i);kamp;amp;f.resolveWith(k[0],k[1])}return this;}
complete = function () {if(!e){var c=arguments,g,h,i,j,k;bamp;amp;(k=b,b=0);for(g=0,h=c.length;g<h;g )i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"amp;amp;a.push(i);kamp;amp;f.resolveWith(k[0],k[1])}return this;}
statusCode = function (a) {if(a){var b;if(t<2)for(b in a)k[b]=[k[b],a[b]];else b=a[v.status],v.then(b,b)}return this;}
responseText = <html><body><h1>502 Bad Gateway</h1>
The server returned an invalid or incomplete response.
</body></html>
status = 502
statusText = error
Ответ №1:
Я, наконец, разобрался с проблемой dang. Не имеет ничего общего с AT amp; T или PhoneGap… ну, все еще не совсем уверен, не несет ли первый ответственности, поскольку AT amp; T является теневым… Проблема была на самом деле в моем сервере CodeIgniter REST — мое приложение создавало новую запись сеанса для каждого запроса на вход (запрос ajax POST), и каким-то образом при возврате по проводу AT amp; T мое приложение решало, что это ошибка 502, поскольку оно не видит данные cookie или сеанса.
Комментарии:
1. Не могли бы вы предоставить дополнительную информацию о том, как это исправить? У меня такая же проблема с PhoneGap, Android и некоторыми голландскими провайдерами.
Ответ №2:
Для тех, у кого все еще есть эта проблема, у меня тоже была проблема. Когда я отправлял запрос на сервер из своего приложения, у меня была функция setcookie.
Это было именно то, что у меня было: setcookie(‘like’.$ _POST [qid].», ‘1’, time() (60 * 60), «/»);
Как только я удалил установленный файл cookie, все работало нормально. Очень странно.