ajax调用因错误而失败"意外的令牌"

时间:2016-04-20 20:21:52

标签: jquery json ajax mongodb codeigniter

我有一个php应用程序进行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 :

当它看到第一个"它时基本上就会死亡:"在mongo doc id" 5717a3873747106e60a087ec"

之后

我尝试过的事情:

我已经验证了jsonlint中的返回数据,看起来数据是有效的json。

我不确定还有什么要检查。我正在使用jsonp vs json玩我的ajax调用的数据类型。 但除此之外,我没有想法。

有什么建议吗?

编辑1

我还应该说我发现了这篇文章:jQuery.ajax() call is returning JSON.parse unexpected character error

但我不知道如何编辑json标头。 我目前还在玩代码以了解如何执行此操作

编辑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

我认为问题在于上面提到的网址与" http://localhost/mytestapp"我用来启动应用程序的URL。所以试着像这样启动我的网络应用程序:

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

但它仍然失败并出现同样的错误。

1 个答案:

答案 0 :(得分: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.