1

我在使用时遇到了这个奇怪的错误$.post

作品

$("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
        alert(data);
                    $('#loader').hide();        
    });
});

上面的代码显示了我使用 php 文件接收的 json 数组,还显示了title此处的字段,并隐藏了加载程序图像。

但是当我alert(data.title),它显示我未定义。此外,当我将数据类型“json”添加$.post

不工作

$("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
        alert(data);
                    $('#loader').hide();        
    }, "json"); //Added datatype here.
});

这既不会提醒任何东西,也不会隐藏加载程序图像。我也试过,

$("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
        jQuery.parseJSON(data);
                    alert(data.title);
                    $('#loader').hide();        
    });
});

上面的也没有提醒任何东西,也没有隐藏加载器。然后我也尝试了这个,但什么也没做。

$("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
        jQuery.parseJSON(data);  //tried without this too.
                    alert(data['title']);
                    $('#loader').hide();        
    });
});

最奇怪的是,我以前使用过 json,如我在第二个脚本中所示(共 4 个),并且工作正常。我的 JS 控制台也没有显示任何错误或警告。我在这里做错了什么?如何访问数据的标题字段?

如果这有帮助,这就是我发送 json 数组的方式,

$json = array("title" => $title, "embed" => $embed, "desc" => $desc, "duration" => $duration, "date" => $date);
print_r(json_encode($json));

如果有人能指出错误并告诉我为什么我的脚本失败,我将非常感激,类似的功能在其他 js 文件中工作。

这是我的数据,由服务器返回,

{"title":"Sunn Raha Hai Na Tu Aashiqui 2 Full Song With Lyrics | Aditya Roy Kapur, Shraddha Kapoor","embed":"\r\t\t\t\t\t\r\t\t\ t\t\t</param></param>\r\t\t\t\t\t</param>\r\t\t\t\t\t\r\t\t\t\ t\t</embed></object>","desc":"播放完整歌曲“Sun Raha Hai Na Tu”,歌词来自 T-Series Films & Vishesh Films 制作的电影“Aashiqui 2”,由 Aditya Roy Kapur、Shraddha Kapoor 主演,为 Ankit Tiwari 配音。\n\n歌曲:SUNN RAHA HAI\n歌手:ANKIT TIWARI\n音乐总监:ANKIT TIWARI\n助理混音工程师 - MICHAEL EDWIN PILLAI\n由 ERIC PILLAI(未来之声)混音和母带OF BOMBAY)\n歌词:SANDEEP NATH\n电影:AASHIQUI 2\n制片人:BHUSHAN KUMAR KRISHAN KUAMR 制片人:MUKESH BHATT
\n导演:MOHIT SURI\n唱片公司:T-SERIES\n\n从 iTunes 购买 - https://itunes.apple.com/in/album/aashiqui-2-original-motion/id630590910?ls=1\n\n享受并与我们保持联系!!\n\n订阅 T 系列频道,享受无限娱乐\nhttp://www.youtube.com/tseries\n\n在 G+ 上圈出我们\nhttp://www.google.com/+tseriesmusic\n\n在 Facebook 上给我们点赞\nhttp://www.facebook.com/tseriesmusic\n\n关注我们\nhttp://www.twitter.com/_Tseries","duration":"391","date":"2013-04-03" }

编辑

这突然起作用了..:o

  $("#add-video").click(function(){
    var url = $("#new-video-url").val();
    $('#loader').show();
    $.post( base_url + "forms/coach/get_url.php", { url:url, base_url:base_url }, function(data){
            alert(data.desc);
            console.log(data.desc);
            $("#loader").hide();

    }, "json");
});
4

3 回答 3

0

在评论中,您提到此 AJAX 对应于 YouTube API。

YouTube 的博客在 2012 年宣布他们将支持CORS,它使用服务器端标头标志,兼容的浏览器将其解释为允许请求,否则浏览器安全性Same-Origin-Policy会禁止这些请求。

正如您所说,假设第一个示例有效,第一个问题是“为什么(后续)alert(data.title)失败?(我的编辑)”。如果alert(data.title)在控制台输入,会失败,因为scopeofdata是定义为参数的回调函数,在全局范围内data是未定义的。如果您尝试以某种方式传dataglobal scope,它仍然可能未定义,因为$.post在获取数据之前立即返回,并且仅将请求排队并设置您提供的回调函数来处理回复。

第二个示例,将$.post dataType参数显式设置为,基于 API'json'可能会失败,因为json 的 mime 类型不允许像a那样发送到服务器,并且据我所知只会做简单的请求没有预检。如果正确应用,可能会执行更复杂的请求。 CORSContent-Type:simple CORS request$.post$.ajax

继续使用的解决方法$.post是不使用json预期的数据类型,将请求作为表单数据发送,如果 API 说会发生这种情况,服务器可能会向您发送回 json,这可以在测试代码时进行验证。

来自https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

简单的请求

一个简单的跨站点请求是:

仅使用 GET、HEAD 或 POST。

如果使用 POST 向服务器发送数据,则通过 HTTP POST 请求发送给服务器的数据的 Content-Type 是 application/x-www-form-urlencoded、multipart/form-data 或 text/plain 之一.

请注意,application/json没有列出Content-Typea 中允许的内容simple CORS request

另请参阅CORS POST 请求适用于纯 javascript,但为什么不使用 jQuery?

于 2013-08-18T04:32:12.283 回答
-1

我认为你必须\用双 '\' 替换所有单人以将其提供给JSON.parse.

于 2013-08-17T18:35:48.000 回答
-1

使用 ajax 作为

$.ajax({
url:url,
type:'post',
dataType:'json',
success:callback
})

使用这种类型,您可以在低级别设置大量参数。jQuery 使用 datatype 属性解析JSON数据并将数据作为回调函数发送。

于 2013-08-17T18:18:21.050 回答