2016-04-20 3 views
2

У меня есть PHP приложение, которое делает вызов Ajax и извлекает следующие данные из моей базы данных:Ajax звонки завершается с ошибкой «Неожиданная знак»

{ 
    "5717a3873747106e60a087ec": { 
     "_id": { 
      "$id": "5717a3873747106e60a087ec" 
     }, 
     "phone": "18455100020", 
     "fax": false, 
     "emergency": false, 
     "site": "ABC", 
     "sip_uri": "", 
     "associated_users": [], 
     "location": "New Zealand", 
     "reservation": [{ 
      "reserved": true, 
      "reserved_for": "COO12" 
     }], 
     "available": true 
    } 
} 

Это код, который я должен сделать вызов Ajax :

$(document).ready(function(){ 
       var request = BASEPATH + 'index.php/export/get_widget/available'; 
       console.log(request); 
       $.ajax({ 
          url:request, 
          type:'GET', 
          dataType:'jsonp', 
          success: function(returnDataFromController) { 
            if (returnDataFromController.status) 
            { 
             console.log(returnDataFromController); 
             //build table contents 
            } 
          },// end success 
          error: function(jqXHR, textStatus, errorThrown) 
          { 
            console.log(errorThrown); 
          } 
       });//end ajax. 
     }); //end document ready 

Когда я проверяю консоль, я вижу, что запрос не был со следующим сообщением об ошибке:

Uncaught SyntaxError: Unexpected token : 

Это в основном умирает, когда он видит, что первый «:» после Монго Идентификатор документа «5717a3873747106e60a087ec»

Что я пробовал:

Я проверил достоверность данных, возвращаемых в jsonlint и это выглядит как данные действительны json.

Я не уверен, что еще проверить. Я играю с jsonp vs json для типа данных моего вызова ajax. Но кроме этого у меня нет идей.

Любые предложения?

EDIT 1

Я должен также сказать, что я нашел этот пост: jQuery.ajax() call is returning JSON.parse unexpected character error

, но я не знаю, как изменить заголовки JSon. В настоящее время я также играл с кодом, чтобы увидеть, как это сделать

EDIT 2:

Когда я изменяю JSONP в JSON, я получаю еще одно сообщение об ошибке:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. 

Переменная «запрос» содержит примерно следующее:

http://10.1.1.1/mytestapp/index.php/export/get_widgets/available 

Я думал, проблема в том, что выше упомянутый URL-адрес сравнивается с URL-адресом «http://localhost/mytestapp», который я использовал для запуска приложения. Так пытались запустить свой веб-приложение, как это вместо:

http://10.1.1.1/mytestapp/index.php/

, но он все еще терпит неудачу с такой же ошибкой.

+3

'DATATYPE: '' JSON,' 'не DATATYPE: 'JSONP',' – MonkeyZeus

+1

вы запрашиваете JSONP , это означает, что вы возвращаетесь ДОЛЖНЫ выглядеть как вызов функции JS, например. 'somecallback (" json data here ")'. если вы возвращаете только данные json сами, без оболочки вызова функций, то это не jsonp. –

+0

Также обратите внимание, что в возвращаемом json нет ключа 'status', но это будет следующая ошибка после того, как вы исправите тип данных. – jeroen

ответ

0

Поэтому основной причиной моей проблемы был json vs jsonp. Я изменил тип данных в своем вызове ajax для json. И тогда вместо передачи полного URL в вызове, я только что прошел имя приложения, как это:

  var request = '/testapp/index.php/export/get_widgets/available'; 
154     console.log(request); 
155     $.ajax({ 
156       url:request, 
157       type:'GET', 
158       dataType:'json', 
159       success: function(returnDataFromController) { 
160         if (returnDataFromController) 
161         { 
162           console.log(returnDataFromController); 
163           console.log(returnDataFromController.id); 
164           //build table contents 
165         } 
166       },// end success 
167       error: function(jqXHR, textStatus, errorThrown) 
168       { 
169         console.log(errorThrown); 
170       } 
171     });//end ajax. 
Смежные вопросы